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..50a3e3e038 --- /dev/null +++ b/.config/dotnet-tools.json @@ -0,0 +1,18 @@ +{ + "version": 1, + "isRoot": true, + "tools": { + "gitreleasemanager.tool": { + "version": "0.18.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]: " +labels: ["needs triage"] +body: +- type: checkboxes + attributes: + label: Prerequisites + options: + - label: I have written a descriptive issue title + required: true + - label: I have searched [issues](https://github.com/GitTools/GitVersion/issues) to ensure it has not already been reported + required: true +- type: dropdown + attributes: + label: GitVersion package + options: + - GitVersion.Tool + - GitVersion.MsBuild + - GitVersion.Portable + - gittools/actions + - AzureDevops task + multiple: true + validations: + required: true +- type: input + attributes: + label: GitVersion version + validations: + required: true +- type: dropdown + attributes: + label: Operating system + options: + - Linux + - Windows + - macOS + - N/A + multiple: true + validations: + required: true +- type: textarea + attributes: + label: What are you seeing? + description: Describe the issue you are seeing + validations: + required: true +- type: textarea + attributes: + label: What is expected? + description: Describe what you would expect + validations: + required: true +- type: textarea + attributes: + label: Steps to Reproduce + description: List of steps or sample project to reproduce the issue + validations: + required: true +- type: textarea + attributes: + label: RepositoryFixture Test + description: If you are able to write your bug or scenario up as a `RepositoryFixture` test and submit a pull-request with it, it is going to increase the likelyhood of the bug being fixed. Make sure there is no sensitive data shared and that you place a stack trace inside a code (```csharp) block to avoid formatting issues. + validations: + required: false +- type: textarea + attributes: + label: Output log or link to your CI build (if appropriate). + description: Log messages you receive when running. Make sure there is no sensitive data shared. No need for backticks here. + render: shell + validations: + required: false \ No newline at end of file diff --git a/.github/actions/artifacts-restore/action.yml b/.github/actions/artifacts-restore/action.yml new file mode 100644 index 0000000000..99be5e4897 --- /dev/null +++ b/.github/actions/artifacts-restore/action.yml @@ -0,0 +1,25 @@ +name: 'Artifacts restore' +description: 'Artifacts restore' + +runs: + using: 'composite' + steps: + - + name: Use cached cake frosting + id: cache-cake + uses: actions/cache@v4 + with: + path: run + key: run-${{ runner.os }}-${{ hashFiles('./build/**') }} + - + name: Use cached tools + id: cache-tools + uses: actions/cache@v4 + with: + path: tools + key: tools-${{ runner.os }}-${{ hashFiles('./build/**') }} + - + name: Setup .NET SDK + uses: actions/setup-dotnet@v4 + with: + global-json-file: global.json diff --git a/.github/actions/docker-manifests/action.yml b/.github/actions/docker-manifests/action.yml new file mode 100644 index 0000000000..9c9a78ef9b --- /dev/null +++ b/.github/actions/docker-manifests/action.yml @@ -0,0 +1,46 @@ +name: 'Docker Manifests' +description: 'Docker Publish Manifests' +inputs: + distro: + description: 'Linux Distro' + required: true + targetFramework: + description: '.net version' + required: true + docker_registry_username: + description: 'DockerHub Registry Username' + required: true + docker_registry_password: + description: 'DockerHub Registry Password' + required: true + github_registry_username: + description: 'GitHub Registry Username' + required: true + github_registry_password: + description: 'GitHub Registry Password' + required: true + +runs: + using: 'composite' + steps: + - + name: Login to DockerHub + uses: docker/login-action@v3 + with: + username: ${{ inputs.docker_registry_username }} + password: ${{ inputs.docker_registry_password }} + - + name: '[Docker Publish Manifests] DockerHub' + shell: pwsh + run: dotnet run/docker.dll --target=DockerManifest --arch=amd64 --arch=arm64 --docker_dotnetversion=${{ inputs.targetFramework }} --docker_distro=${{ inputs.distro }} --docker_registry dockerhub + - + name: Login to GitHub + uses: docker/login-action@v3 + with: + registry: ghcr.io + username: ${{ inputs.github_registry_username }} + password: ${{ inputs.github_registry_password }} + - + name: '[Docker Publish Manifests] GitHub' + shell: pwsh + run: dotnet run/docker.dll --target=DockerManifest --arch=amd64 --arch=arm64 --docker_dotnetversion=${{ inputs.targetFramework }} --docker_distro=${{ inputs.distro }} --docker_registry github diff --git a/.github/actions/docker-publish/action.yml b/.github/actions/docker-publish/action.yml new file mode 100644 index 0000000000..feff913274 --- /dev/null +++ b/.github/actions/docker-publish/action.yml @@ -0,0 +1,49 @@ +name: 'Docker Publish' +description: 'Docker Publish Images' +inputs: + arch: + description: 'Docker architecture' + required: true + distro: + description: 'Linux Distro' + required: true + targetFramework: + description: '.net version' + required: true + docker_registry_username: + description: 'DockerHub Registry Username' + required: true + docker_registry_password: + description: 'DockerHub Registry Password' + required: true + github_registry_username: + description: 'GitHub Registry Username' + required: true + github_registry_password: + description: 'GitHub Registry Password' + required: true + +runs: + using: 'composite' + steps: + - + name: Login to DockerHub + uses: docker/login-action@v3 + with: + username: ${{ inputs.docker_registry_username }} + password: ${{ inputs.docker_registry_password }} + - + name: '[Docker Publish] DockerHub' + shell: pwsh + run: dotnet run/docker.dll --target=DockerPublish --arch=${{ inputs.arch }} --docker_dotnetversion=${{ inputs.targetFramework }} --docker_distro=${{ inputs.distro }} --docker_registry dockerhub --verbosity=diagnostic + - + name: Login to GitHub + uses: docker/login-action@v3 + with: + registry: ghcr.io + username: ${{ inputs.github_registry_username }} + password: ${{ inputs.github_registry_password }} + - + name: '[Docker Publish] GitHub' + shell: pwsh + run: dotnet run/docker.dll --target=DockerPublish --arch=${{ inputs.arch }} --docker_dotnetversion=${{ inputs.targetFramework }} --docker_distro=${{ inputs.distro }} --docker_registry github --verbosity=diagnostic diff --git a/.github/actions/docker-test/action.yml b/.github/actions/docker-test/action.yml new file mode 100644 index 0000000000..67b4afa070 --- /dev/null +++ b/.github/actions/docker-test/action.yml @@ -0,0 +1,24 @@ +name: 'Docker Test' +description: 'Docker Test Images' +inputs: + arch: + description: 'Docker architecture' + default: 'amd64' + distro: + description: 'Linux Distro' + default: 'debian.11' + targetFramework: + description: '.net version' + default: '8.0' + +runs: + using: 'composite' + steps: + - + name: '[Docker Build & Test] DockerHub' + shell: pwsh + run: dotnet run/docker.dll --target=DockerTest --arch=${{ inputs.arch }} --docker_dotnetversion=${{ inputs.targetFramework }} --docker_distro=${{ inputs.distro }} --docker_registry dockerhub --verbosity=diagnostic + - + name: '[Docker Build & Test] GitHub' + shell: pwsh + run: dotnet run/docker.dll --target=DockerTest --arch=${{ inputs.arch }} --docker_dotnetversion=${{ inputs.targetFramework }} --docker_distro=${{ inputs.distro }} --docker_registry github --verbosity=diagnostic diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 7fda019add..ecc644fda4 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -5,18 +5,51 @@ updates: - "dependencies" commit-message: prefix: "(deps)" - directory: "/" + groups: + microsoft: + patterns: + - "Microsoft.*" + - "System.*" + analyzers: + patterns: + - "*Analyzers" + serilog: + patterns: + - "Serilog.*" + nunit: + patterns: + - "NUnit.*" + directories: + - "/build" + - "/new-cli" + - "/src" + - "/" schedule: interval: daily open-pull-requests-limit: 10 - ignore: - - dependency-name: "Microsoft.Build" - versions: ["16.9.0", "16.11.0"] + - package-ecosystem: github-actions labels: - "dependencies" commit-message: prefix: "(build deps)" + groups: + actions: + patterns: + - "actions/*" directory: "/" schedule: interval: daily + +- package-ecosystem: npm + labels: + - "dependencies" + commit-message: + prefix: "(docs deps)" + groups: + remark: + patterns: + - "remark*" + directory: "/" + schedule: + interval: monthly diff --git a/.github/mergify.yml b/.github/mergify.yml index a4c175a3eb..2a9dca3674 100644 --- a/.github/mergify.yml +++ b/.github/mergify.yml @@ -11,12 +11,6 @@ pull_request_rules: - '#commits-behind=0' # Only merge up to date pull requests - check-success=DotNet Format - check-success=Release - - check-success=Unit Test code (windows-latest, netcoreapp3.1) - - check-success=Unit Test code (ubuntu-latest, netcoreapp3.1) - - check-success=Unit Test code (macos-latest, netcoreapp3.1) - - check-success=Unit Test code (windows-latest, net5.0) - - check-success=Unit Test code (windows-latest, net5.0) - - check-success=Unit Test code (windows-latest, net5.0) - repository-full-name=GitTools/GitVersion # Don't auto-merge PRs in forks actions: merge: diff --git a/.github/stale.yml b/.github/stale.yml deleted file mode 100644 index b9f69483f9..0000000000 --- a/.github/stale.yml +++ /dev/null @@ -1,31 +0,0 @@ -# Number of days of inactivity before an issue becomes stale -daysUntilStale: 90 - -# Number of days of inactivity before a stale issue is closed -daysUntilClose: 30 - -# Issues with these labels will never be considered stale -exemptLabels: - - pinned - - security - - bug - - failing test case - - help wanted - -# Set to true to ignore issues in a milestone (defaults to false) -exemptMilestones: true - -# Set to true to ignore issues with an assignee (defaults to false) -exemptAssignees: true - -# Label to use when marking an issue as stale -staleLabel: stale - -# Comment to post when marking an issue as stale. Set to `false` to disable -markComment: > - This issue has been automatically marked as stale because it has not had - recent activity. After 30 days from now, it will be closed if no further - activity occurs. Thank you for your contributions. - -# Comment to post when closing a stale issue. Set to `false` to disable -closeComment: false diff --git a/.github/workflows/_artifacts_linux.yml b/.github/workflows/_artifacts_linux.yml new file mode 100644 index 0000000000..3bceaa02a6 --- /dev/null +++ b/.github/workflows/_artifacts_linux.yml @@ -0,0 +1,57 @@ +on: + workflow_call: + inputs: + runner: + required: true + type: string + arch: + required: true + type: string + +env: + DOTNET_INSTALL_DIR: "./.dotnet" + DOTNET_ROLL_FORWARD: "Major" + +jobs: + artifacts: + name: ${{ matrix.distro }} - net${{ matrix.targetFramework }} + runs-on: ${{ inputs.runner }} + strategy: + fail-fast: false + matrix: + distro: + - alpine.3.17 + - alpine.3.18 + - centos.stream.8 + - debian.11 + - fedora.37 + - ubuntu.20.04 + - ubuntu.22.04 + - ubuntu.24.04 + targetFramework: [ '6.0', '8.0' ] + + steps: + - + name: Checkout + uses: actions/checkout@v4 + with: + fetch-depth: 0 + - + name: Restore State + uses: ./.github/actions/artifacts-restore + - + uses: actions/download-artifact@v4 + name: Download nuget packages + with: + name: nuget + path: ${{ github.workspace }}/artifacts/packages/nuget + - + uses: actions/download-artifact@v4 + name: Download native packages + with: + name: native-${{ runner.os }} + path: ${{ github.workspace }}/artifacts/packages/native + - + name: '[Test Artifacts]' + shell: pwsh + run: dotnet run/artifacts.dll --target=ArtifactsTest --arch=${{ inputs.arch }} --docker_dotnetversion=${{ matrix.targetFramework }} --docker_distro=${{ matrix.distro }} \ No newline at end of file diff --git a/.github/workflows/_artifacts_windows.yml b/.github/workflows/_artifacts_windows.yml new file mode 100644 index 0000000000..0f569701a5 --- /dev/null +++ b/.github/workflows/_artifacts_windows.yml @@ -0,0 +1,35 @@ +on: + workflow_call: + +env: + DOTNET_INSTALL_DIR: "./.dotnet" + DOTNET_ROLL_FORWARD: "Major" + +jobs: + artifacts: + name: ${{ matrix.package }} + runs-on: windows-latest + strategy: + fail-fast: false + matrix: + package: [ Executable, MsBuildFull ] + + steps: + - + name: Checkout + uses: actions/checkout@v4 + with: + fetch-depth: 0 + - + name: Restore State + uses: ./.github/actions/artifacts-restore + - + uses: actions/download-artifact@v4 + name: Download nuget packages + with: + name: nuget + path: ${{ github.workspace }}/artifacts/packages/nuget + - + name: '[Test Artifacts]' + shell: pwsh + run: dotnet run/artifacts.dll --target=Artifacts${{ matrix.package }}Test diff --git a/.github/workflows/_build.yml b/.github/workflows/_build.yml new file mode 100644 index 0000000000..f3cfe1411a --- /dev/null +++ b/.github/workflows/_build.yml @@ -0,0 +1,50 @@ +on: + workflow_call: + +env: + DOTNET_INSTALL_DIR: "./.dotnet" + DOTNET_ROLL_FORWARD: "Major" + +jobs: + build: + name: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + os: [windows-latest, ubuntu-latest, macos-13, macos-14] + + runs-on: ${{ matrix.os }} + steps: + - + name: Checkout + uses: actions/checkout@v4 + with: + fetch-depth: 0 + - + name: Restore State + uses: ./.github/actions/artifacts-restore + - + name: '[Build]' + shell: pwsh + run: dotnet run/build.dll --target=Package + - + name: 'Upload nuget packages' + uses: actions/upload-artifact@v4 + if: matrix.os == 'windows-latest' + with: + name: nuget + path: ${{ github.workspace }}/artifacts/packages/nuget + - + name: 'Upload native packages' + uses: actions/upload-artifact@v4 + if: matrix.os == 'windows-latest' + with: + name: native-${{ runner.os }} + path: ${{ github.workspace }}/artifacts/packages/native/*.zip + - + name: 'Upload native packages' + uses: actions/upload-artifact@v4 + if: matrix.os != 'windows-latest' && matrix.os != 'macos-13' + with: + name: native-${{ runner.os }} + path: ${{ github.workspace }}/artifacts/packages/native/*.tar.gz diff --git a/.github/workflows/_docker.yml b/.github/workflows/_docker.yml new file mode 100644 index 0000000000..b9e2cb6d00 --- /dev/null +++ b/.github/workflows/_docker.yml @@ -0,0 +1,91 @@ +on: + workflow_call: + inputs: + runner: + required: true + type: string + arch: + required: true + type: string + +env: + DOTNET_INSTALL_DIR: "./.dotnet" + DOTNET_ROLL_FORWARD: "Major" + +jobs: + docker: + name: ${{ matrix.distro }} - net${{ matrix.targetFramework }} + runs-on: ${{ inputs.runner }} + strategy: + fail-fast: false + matrix: + distro: + - alpine.3.17 + - alpine.3.18 + - centos.stream.8 + - debian.11 + - fedora.37 + - ubuntu.20.04 + - ubuntu.22.04 + - ubuntu.24.04 + targetFramework: [ '6.0', '8.0' ] + + steps: + - + name: Checkout + uses: actions/checkout@v4 + with: + fetch-depth: 0 + - + name: Restore State + uses: ./.github/actions/artifacts-restore + - + uses: actions/download-artifact@v4 + name: Download nuget packages + with: + name: nuget + path: ${{ github.workspace }}/artifacts/packages/nuget + - + name: Set up Docker + uses: crazy-max/ghaction-setup-docker@v3 + with: + daemon-config: '{ "features": { "containerd-snapshotter": true } }' + - + name: Setup QEMU + uses: docker/setup-qemu-action@v3 + - + name: Setup Docker Buildx + uses: docker/setup-buildx-action@v3 + with: + version: 'latest' + driver-opts: 'image=moby/buildkit:buildx-stable-1' + install: true + - + name: Docker Test + if: success() && github.event_name == 'pull_request' || github.repository_owner != 'GitTools' + uses: ./.github/actions/docker-test + with: + arch: ${{ inputs.arch }} + distro: ${{ matrix.distro }} + targetFramework: ${{ matrix.targetFramework }} + - + name: Docker Publish + if: success() && github.event_name != 'pull_request' && github.repository_owner == 'GitTools' && github.ref_name == 'main' + uses: ./.github/actions/docker-publish + with: + arch: ${{ inputs.arch }} + distro: ${{ matrix.distro }} + targetFramework: ${{ matrix.targetFramework }} + docker_registry_username: ${{ secrets.DOCKER_USERNAME }} + docker_registry_password: ${{ secrets.DOCKER_PASSWORD }} + github_registry_username: ${{ github.repository_owner }} + github_registry_password: ${{ secrets.DOCKER_GITHUB_TOKEN }} + - + name: DockerHub Publish Readme + if: success() && github.event_name != 'pull_request' && github.repository_owner == 'GitTools' && github.ref_name == 'main' + shell: pwsh + run: dotnet run/docker.dll --target=DockerHubReadmePublish + env: + DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }} + DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }} + diff --git a/.github/workflows/_docker_manifests.yml b/.github/workflows/_docker_manifests.yml new file mode 100644 index 0000000000..5c7dd10fd9 --- /dev/null +++ b/.github/workflows/_docker_manifests.yml @@ -0,0 +1,60 @@ +on: + workflow_call: + +env: + DOTNET_INSTALL_DIR: "./.dotnet" + DOTNET_ROLL_FORWARD: "Major" + +jobs: + manifest: + name: ${{ matrix.distro }} - net${{ matrix.targetFramework }} + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + distro: + - alpine.3.17 + - alpine.3.18 + - centos.stream.8 + - debian.11 + - fedora.37 + - ubuntu.20.04 + - ubuntu.22.04 + - ubuntu.24.04 + targetFramework: [ '6.0', '8.0' ] + + steps: + - + name: Checkout + uses: actions/checkout@v4 + with: + fetch-depth: 0 + - + name: Restore State + uses: ./.github/actions/artifacts-restore + - + name: Set up Docker + uses: crazy-max/ghaction-setup-docker@v3 + with: + daemon-config: '{ "features": { "containerd-snapshotter": true } }' + - + name: Setup QEMU + uses: docker/setup-qemu-action@v3 + - + name: Setup Docker Buildx + uses: docker/setup-buildx-action@v3 + with: + version: 'latest' + driver-opts: 'image=moby/buildkit:buildx-stable-1' + install: true + - + name: Docker Manifests + if: success() && github.event_name != 'pull_request' && github.repository_owner == 'GitTools' && github.ref_name == 'main' + uses: ./.github/actions/docker-manifests + with: + distro: ${{ matrix.distro }} + targetFramework: ${{ matrix.targetFramework }} + docker_registry_username: ${{ secrets.DOCKER_USERNAME }} + docker_registry_password: ${{ secrets.DOCKER_PASSWORD }} + github_registry_username: ${{ github.repository_owner }} + github_registry_password: ${{ secrets.DOCKER_GITHUB_TOKEN }} diff --git a/.github/workflows/_prepare.yml b/.github/workflows/_prepare.yml new file mode 100644 index 0000000000..9f70c547f7 --- /dev/null +++ b/.github/workflows/_prepare.yml @@ -0,0 +1,42 @@ +on: + workflow_call: + +jobs: + prepare: + name: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + os: [windows-latest, ubuntu-latest, macos-13, macos-14] + + runs-on: ${{ matrix.os }} + steps: + - + name: Checkout + uses: actions/checkout@v4 + - + name: Cache cake frosting + id: cache-cake + uses: actions/cache@v4 + with: + path: run + key: run-${{ runner.os }}-${{ hashFiles('./build/**') }} + - name: Use cached tools + id: cache-tools + uses: actions/cache@v4 + with: + path: tools + key: tools-${{ runner.os }}-${{ hashFiles('./build/**') }} + - + name: Setup .NET SDK + uses: actions/setup-dotnet@v4 + with: + global-json-file: global.json + - + name: '[Build]' + if: steps.cache-cake.outputs.cache-hit != 'true' + run: dotnet build build/CI.sln --configuration=Release + - + name: '[Prepare]' + shell: pwsh + run: dotnet run/build.dll --target=BuildPrepare diff --git a/.github/workflows/_publish.yml b/.github/workflows/_publish.yml new file mode 100644 index 0000000000..ce6157faef --- /dev/null +++ b/.github/workflows/_publish.yml @@ -0,0 +1,39 @@ +on: + workflow_call: + +env: + DOTNET_INSTALL_DIR: "./.dotnet" + DOTNET_ROLL_FORWARD: "Major" + +jobs: + publish: + name: ${{ matrix.taskName }} + runs-on: windows-latest + strategy: + fail-fast: false + matrix: + taskName: [ NuGet, Chocolatey ] + + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + NUGET_API_KEY: ${{ secrets.NUGET_API_KEY }} + CHOCOLATEY_API_KEY: ${{ secrets.CHOCOLATEY_API_KEY }} + steps: + - + name: Checkout + uses: actions/checkout@v4 + with: + fetch-depth: 0 + - + name: Restore State + uses: ./.github/actions/artifacts-restore + - + uses: actions/download-artifact@v4 + name: Download nuget packages + with: + name: nuget + path: ${{ github.workspace }}/artifacts/packages/nuget + - + name: '[Publish]' + shell: pwsh + run: dotnet run/publish.dll --target=Publish${{ matrix.taskName }} diff --git a/.github/workflows/_unit_tests.yml b/.github/workflows/_unit_tests.yml new file mode 100644 index 0000000000..dd8a130d49 --- /dev/null +++ b/.github/workflows/_unit_tests.yml @@ -0,0 +1,39 @@ +on: + workflow_call: + +env: + DOTNET_INSTALL_DIR: "./.dotnet" + DOTNET_ROLL_FORWARD: "Major" + +jobs: + unit_test: + name: ${{ matrix.os }} - net${{ matrix.targetFramework }} + env: + CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} + strategy: + fail-fast: false + matrix: + os: [windows-latest, ubuntu-latest, macos-13, macos-14] + targetFramework: [ '6.0', '8.0' ] + + runs-on: ${{ matrix.os }} + steps: + - + name: Checkout + uses: actions/checkout@v4 + with: + fetch-depth: 0 + - + name: Restore State + uses: ./.github/actions/artifacts-restore + - + name: '[Unit Test]' + shell: pwsh + run: dotnet run/build.dll --target=Test --dotnet_target=${{ matrix.targetFramework }} + + - + name: Test Summary + uses: test-summary/action@v2.4 + if: matrix.targetFramework == '8.0' + with: + paths: artifacts/test-results/*.results.xml diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 2a2da1be3b..a85688e8db 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -3,27 +3,30 @@ name: CI on: push: branches: - - main - - 'fix/*' - - 'feature/*' - - 'support/*' + - main + - 'fix/*' + - 'feature/*' + - 'poc/*' + - 'support/*' paths: - - '**' - - '!docs/**' + - '**' + - '!docs/**' pull_request: branches: - - main - - 'support/*' + - main + - 'support/*' paths: - - '**' - - '!docs/**' - + - '**' + - '!docs/**' + merge_group: + types: [checks_requested] + repository_dispatch: - types: [release] + types: [ ci-release ] env: - DOTNET_ROLL_FORWARD_ON_NO_CANDIDATE_FX: 2 + DOTNET_ROLL_FORWARD: "Major" DOTNET_CLI_TELEMETRY_OPTOUT: 1 DOTNET_SKIP_FIRST_TIME_EXPERIENCE: 1 DOTNET_NOLOGO: 1 @@ -36,461 +39,114 @@ permissions: jobs: prepare: - name: Prepare Build - runs-on: ${{ matrix.os }} - strategy: - matrix: - os: [windows-latest, ubuntu-latest, macos-latest] - fail-fast: false - - steps: - - - name: Checkout - uses: actions/checkout@v3 - - - name: Cache cake frosting - id: cache-cake - uses: actions/cache@v3.0.11 - with: - path: run - key: run-${{ runner.os }}-${{ hashFiles('./build/**') }} - - - name: Setup .NET SDK - uses: actions/setup-dotnet@v3.0.2 - with: - dotnet-version: '7.0.x' - dotnet-quality: 'preview' - - - name: '[Prepare]' - if: steps.cache-cake.outputs.cache-hit != 'true' - run: dotnet build build/CI.sln --configuration=Release + name: Prepare + uses: ./.github/workflows/_prepare.yml build: - name: Build code & Package - needs: [prepare] - runs-on: ${{ matrix.os }} - strategy: - matrix: - os: [windows-latest, ubuntu-latest, macos-latest] - fail-fast: false - - steps: - - - name: Checkout - uses: actions/checkout@v3 - with: - fetch-depth: 0 - - - name: Use cached cake frosting - id: cache-cake - uses: actions/cache@v3.0.11 - with: - path: run - key: run-${{ runner.os }}-${{ hashFiles('./build/**') }} - - - name: Use cached tools - id: cache-tools - uses: actions/cache@v3.0.11 - with: - path: tools - key: tools-${{ runner.os }}-${{ hashFiles('./build/**') }} - - - name: Setup .NET SDK - uses: actions/setup-dotnet@v3.0.2 - with: - dotnet-version: '7.0.x' - dotnet-quality: 'preview' - - - name: '[Build]' - shell: pwsh - run: dotnet run/build.dll --target=Package - - - name: 'Upload nuget packages' - uses: actions/upload-artifact@v3 - if: matrix.os == 'windows-latest' - with: - name: nuget - path: ${{ github.workspace }}/artifacts/packages/nuget - - - name: 'Upload native packages' - uses: actions/upload-artifact@v3 - if: matrix.os == 'windows-latest' - with: - name: native-${{ runner.os }} - path: ${{ github.workspace }}/artifacts/packages/native/*.zip - - - name: 'Upload native packages' - uses: actions/upload-artifact@v3 - if: matrix.os != 'windows-latest' - with: - name: native-${{ runner.os }} - path: ${{ github.workspace }}/artifacts/packages/native/*.tar.gz + name: Build & Package + needs: [ prepare ] + uses: ./.github/workflows/_build.yml unit_test: - name: Unit Test code - needs: [prepare] - runs-on: ${{ matrix.os }} - env: - CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} - strategy: - matrix: - os: [windows-latest, ubuntu-latest, macos-latest] - targetFramework: [net48, net5.0, net6.0, netcoreapp3.1] - exclude: - - - os: 'ubuntu-latest' - targetFramework: net48 - - - os: 'macos-latest' - targetFramework: net48 - fail-fast: false - - steps: - - - name: Checkout - uses: actions/checkout@v3 - with: - fetch-depth: 0 - - - name: Use cached cake frosting - id: cache-cake - uses: actions/cache@v3.0.11 - with: - path: run - key: run-${{ runner.os }}-${{ hashFiles('./build/**') }} - - - name: Use cached tools - id: cache-tools - uses: actions/cache@v3.0.11 - with: - path: tools - key: tools-${{ runner.os }}-${{ hashFiles('./build/**') }} - - - name: Setup .NET SDK - uses: actions/setup-dotnet@v3.0.2 - with: - dotnet-version: '7.0.x' - dotnet-quality: 'preview' - - - name: '[Unit Test]' - shell: pwsh - run: dotnet run/build.dll --target=Test --dotnet_target=${{ matrix.targetFramework }} - - # - - # name: Test Summary - # uses: test-summary/action@v1 - # with: - # paths: artifacts/test-results/*.results.xml - # if: always() + name: Test + needs: [ prepare ] + uses: ./.github/workflows/_unit_tests.yml + secrets: inherit artifacts_windows_test: - name: Test artifacts on windows - needs: [build] - runs-on: windows-latest - strategy: - matrix: - package: [ Executable, MsBuildFull ] - fail-fast: false - - steps: - - - name: Checkout - uses: actions/checkout@v3 - with: - fetch-depth: 0 - - - name: Use cached cake frosting - id: cache-cake - uses: actions/cache@v3.0.11 - with: - path: run - key: run-${{ runner.os }}-${{ hashFiles('./build/**') }} - - - name: Use cached tools - id: cache-tools - uses: actions/cache@v3.0.11 - with: - path: tools - key: tools-${{ runner.os }}-${{ hashFiles('./build/**') }} - - - uses: actions/download-artifact@v3 - name: Download nuget packages - with: - name: nuget - path: ${{ github.workspace }}/artifacts/packages/nuget - - - name: Setup .NET SDK - uses: actions/setup-dotnet@v3.0.2 - with: - dotnet-version: '7.0.x' - dotnet-quality: 'preview' - - - name: '[Test Artifacts]' - shell: pwsh - run: dotnet run/artifacts.dll --target=Artifacts${{ matrix.package }}Test + name: Artifacts Windows + needs: [ build ] + uses: ./.github/workflows/_artifacts_windows.yml artifacts_linux_test: - name: Test artifacts in docker - needs: [build] - runs-on: ubuntu-latest + needs: [ build ] + name: Artifacts Linux (${{ matrix.arch }}) strategy: - matrix: - targetFramework: [ '3.1', '5.0', '6.0' ] - distro: [ alpine.3.12, alpine.3.13, alpine.3.14, centos.7, centos.8, debian.9, debian.10, debian.11, fedora.33, ubuntu.18.04, ubuntu.20.04 ] fail-fast: false - - steps: - - - name: Checkout - uses: actions/checkout@v3 - with: - fetch-depth: 0 - - - name: Use cached cake frosting - id: cache-cake - uses: actions/cache@v3.0.11 - with: - path: run - key: run-${{ runner.os }}-${{ hashFiles('./build/**') }} - - - name: Use cached tools - id: cache-tools - uses: actions/cache@v3.0.11 - with: - path: tools - key: tools-${{ runner.os }}-${{ hashFiles('./build/**') }} - - - uses: actions/download-artifact@v3 - name: Download nuget packages - with: - name: nuget - path: ${{ github.workspace }}/artifacts/packages/nuget - - - uses: actions/download-artifact@v3 - name: Download native packages - with: - name: native-${{ runner.os }} - path: ${{ github.workspace }}/artifacts/packages/native - - - name: Setup QEMU - uses: docker/setup-qemu-action@v2 - - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v2 - with: - install: true - - - name: Setup .NET SDK - uses: actions/setup-dotnet@v3.0.2 - with: - dotnet-version: '7.0.x' - dotnet-quality: 'preview' - - - name: '[Test Artifacts (amd64)]' - shell: pwsh - run: dotnet run/artifacts.dll --target=ArtifactsTest --arch amd64 --docker_dotnetversion=${{ matrix.targetFramework }} --docker_distro=${{ matrix.distro }} - - - name: '[Test Artifacts (arm64)]' - shell: pwsh - run: dotnet run/artifacts.dll --target=ArtifactsTest --arch arm64 --docker_dotnetversion=${{ matrix.targetFramework }} --docker_distro=${{ matrix.distro }} + matrix: + include: + - arch: amd64 + runner: ubuntu-latest + - arch: arm64 + runner: ubuntu-latest + uses: ./.github/workflows/_artifacts_linux.yml + with: + runner: ${{ matrix.runner }} + arch: ${{ matrix.arch }} docker_linux_images: - name: Build, Test and Publish Docker Images - needs: [build] - runs-on: ubuntu-latest + needs: [ build ] + name: Docker Images (${{ matrix.arch }}) strategy: - matrix: - targetFramework: [ '3.1', '5.0', '6.0' ] - distro: [ alpine.3.12, alpine.3.13, alpine.3.14, centos.7, centos.8, debian.9, debian.10, debian.11, fedora.33, ubuntu.18.04, ubuntu.20.04 ] fail-fast: false - - steps: - - - name: Checkout - uses: actions/checkout@v3 - with: - fetch-depth: 0 - - - name: Use cached cake frosting - id: cache-cake - uses: actions/cache@v3.0.11 - with: - path: run - key: run-${{ runner.os }}-${{ hashFiles('./build/**') }} - - - name: Use cached tools - id: cache-tools - uses: actions/cache@v3.0.11 - with: - path: tools - key: tools-${{ runner.os }}-${{ hashFiles('./build/**') }} - - - uses: actions/download-artifact@v3 - name: Download nuget packages - with: - name: nuget - path: ${{ github.workspace }}/artifacts/packages/nuget - - - name: Setup QEMU - uses: docker/setup-qemu-action@v2 - - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v2 - with: - install: true - - - name: Setup .NET SDK - uses: actions/setup-dotnet@v3.0.2 - with: - dotnet-version: '7.0.x' - dotnet-quality: 'preview' - - - name: Login to DockerHub - if: success() && github.event_name != 'pull_request' && github.repository_owner == 'GitTools' - uses: docker/login-action@v2 - with: - username: ${{ secrets.DOCKER_USERNAME }} - password: ${{ secrets.DOCKER_PASSWORD }} - - - name: '[Docker Build/Test/Publish (amd64)] DockerHub' - if: success() && github.event_name != 'pull_request' && github.repository_owner == 'GitTools' - shell: pwsh - run: dotnet run/docker.dll --target=DockerPublish --arch amd64 --docker_dotnetversion=${{ matrix.targetFramework }} --docker_distro=${{ matrix.distro }} --docker_registry dockerhub - - - name: '[Docker Build/Test/Publish (arm64)] DockerHub' - if: success() && github.event_name != 'pull_request' && github.repository_owner == 'GitTools' - shell: pwsh - run: dotnet run/docker.dll --target=DockerPublish --arch arm64 --docker_dotnetversion=${{ matrix.targetFramework }} --docker_distro=${{ matrix.distro }} --docker_registry dockerhub - - - name: '[Docker Publish Manifest] DockerHub' - if: success() && github.event_name != 'pull_request' && github.repository_owner == 'GitTools' - shell: pwsh - run: dotnet run/docker.dll --target=DockerManifest --docker_dotnetversion=${{ matrix.targetFramework }} --docker_distro=${{ matrix.distro }} --docker_registry dockerhub - - - - name: Login to GitHub Container Registry - if: success() && github.event_name != 'pull_request' && github.repository_owner == 'GitTools' - uses: docker/login-action@v2 - with: - registry: ghcr.io - username: ${{ github.repository_owner }} - password: ${{ secrets.DOCKER_GITHUB_TOKEN }} - - - name: '[Docker Build/Test/Publish (amd64)] GitHub Container Registry' - if: success() && github.event_name != 'pull_request' && github.repository_owner == 'GitTools' - shell: pwsh - run: dotnet run/docker.dll --target=DockerPublish --arch amd64 --docker_dotnetversion=${{ matrix.targetFramework }} --docker_distro=${{ matrix.distro }} --docker_registry github - - - name: '[Docker Build/Test/Publish (arm64)] GitHub Container Registry' - if: success() && github.event_name != 'pull_request' && github.repository_owner == 'GitTools' - shell: pwsh - run: dotnet run/docker.dll --target=DockerPublish --arch arm64 --docker_dotnetversion=${{ matrix.targetFramework }} --docker_distro=${{ matrix.distro }} --docker_registry github - - - name: '[Docker Publish Manifest] GitHub Container Registry' - if: success() && github.event_name != 'pull_request' && github.repository_owner == 'GitTools' - shell: pwsh - run: dotnet run/docker.dll --target=DockerManifest --docker_dotnetversion=${{ matrix.targetFramework }} --docker_distro=${{ matrix.distro }} --docker_registry github + matrix: + include: + - arch: amd64 + runner: ubuntu-latest + - arch: arm64 + runner: ubuntu-latest + + uses: ./.github/workflows/_docker.yml + with: + runner: ${{ matrix.runner }} + arch: ${{ matrix.arch }} + secrets: inherit + + docker_linux_manifests: + needs: [ docker_linux_images ] + name: Docker Manifests + uses: ./.github/workflows/_docker_manifests.yml + secrets: inherit publish: name: Publish - needs: [artifacts_windows_test, artifacts_linux_test, docker_linux_images] - runs-on: windows-latest - strategy: - matrix: - taskName: [NuGet, Chocolatey] - fail-fast: false - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - NUGET_API_KEY: ${{ secrets.NUGET_API_KEY }} - CHOCOLATEY_API_KEY: ${{ secrets.CHOCOLATEY_API_KEY }} - steps: - - - name: Checkout - uses: actions/checkout@v3 - with: - fetch-depth: 0 - - - name: Use cached cake frosting - id: cache-cake - uses: actions/cache@v3.0.11 - with: - path: run - key: run-${{ runner.os }}-${{ hashFiles('./build/**') }} - - - name: Use cached tools - id: cache-tools - uses: actions/cache@v3.0.11 - with: - path: tools - key: tools-${{ runner.os }}-${{ hashFiles('./build/**') }} - - - uses: actions/download-artifact@v3 - name: Download nuget packages - with: - name: nuget - path: ${{ github.workspace }}/artifacts/packages/nuget - - - name: Setup .NET SDK - uses: actions/setup-dotnet@v3.0.2 - with: - dotnet-version: '7.0.x' - dotnet-quality: 'preview' - - - name: '[Publish]' - shell: pwsh - run: dotnet run/publish.dll --target=Publish${{ matrix.taskName }} + needs: [ artifacts_windows_test, artifacts_linux_test ] + uses: ./.github/workflows/_publish.yml + secrets: inherit release: name: Release - needs: [publish] + needs: [ publish, docker_linux_manifests ] runs-on: windows-latest env: GITHUB_TOKEN: ${{ secrets.RELEASE_GITHUB_TOKEN }} steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: fetch-depth: 0 - - name: Use cached cake frosting - id: cache-cake - uses: actions/cache@v3.0.11 - with: - path: run - key: run-${{ runner.os }}-${{ hashFiles('./build/**') }} - - - name: Use cached tools - id: cache-tools - uses: actions/cache@v3.0.11 - with: - path: tools - key: tools-${{ runner.os }}-${{ hashFiles('./build/**') }} + name: Restore State + uses: ./.github/actions/artifacts-restore - - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 name: Download native linux packages with: name: native-Linux path: ${{ github.workspace }}/artifacts/packages/native - - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 name: Download native windows packages with: name: native-Windows path: ${{ github.workspace }}/artifacts/packages/native - - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 name: Download native macos packages with: name: native-macOS path: ${{ github.workspace }}/artifacts/packages/native - - - name: Setup .NET SDK - uses: actions/setup-dotnet@v3.0.2 - with: - dotnet-version: '7.0.x' - dotnet-quality: 'preview' - name: '[Release]' shell: pwsh run: dotnet run/release.dll --target=PublishRelease + - + name: '[Publish Release]' + if: ${{ github.event_name == 'repository_dispatch' }} + uses: peter-evans/repository-dispatch@v3 + with: + token: ${{ secrets.RELEASE_GITHUB_TOKEN }} + repository: ${{ github.repository }} + event-type: publish-release + client-payload: '{"ref": "${{ github.ref }}", "sha": "${{ github.sha }}", "tag": "${{ github.event.client_payload.tag }}"}' \ No newline at end of file diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index ccdaab0e61..0597068156 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -8,6 +8,8 @@ on: paths: - '**' - '!docs/**' + - '!.github/**' + - .github/workflows/codeql-analysis.yml pull_request: branches: @@ -16,12 +18,19 @@ on: paths: - '**' - '!docs/**' + - '!.github/**' + - .github/workflows/codeql-analysis.yml schedule: - cron: '0 12 * * *' permissions: contents: read +env: + DOTNET_ROLL_FORWARD: "Major" + DOTNET_CLI_TELEMETRY_OPTOUT: 1 + DOTNET_SKIP_FIRST_TIME_EXPERIENCE: 1 + DOTNET_NOLOGO: 1 jobs: analyze: @@ -40,29 +49,28 @@ jobs: steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: fetch-depth: 0 - name: Initialize CodeQL - uses: github/codeql-action/init@v2 + uses: github/codeql-action/init@v3 with: languages: ${{ matrix.language }} - name: Cache cake frosting id: cache-cake - uses: actions/cache@v3.0.11 + uses: actions/cache@v4 with: path: run key: run-${{ runner.os }}-${{ hashFiles('./build/**') }} - name: Setup .NET SDK - uses: actions/setup-dotnet@v3.0.2 + uses: actions/setup-dotnet@v4 with: - dotnet-version: '7.0.x' - dotnet-quality: 'preview' + global-json-file: global.json - name: '[Prepare]' @@ -72,7 +80,7 @@ jobs: - name: '[Build]' shell: pwsh - run: dotnet run/build.dll --target=Build --exclusive + run: dotnet run/build.dll --target=BuildPrepare --exclusive - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@v2 + uses: github/codeql-action/analyze@v3 diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index a0adf79364..6eb678197f 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -2,10 +2,11 @@ name: Verify & Publish Docs on: workflow_dispatch: + repository_dispatch: + types: [ publish-release ] push: branches: - # - main - - 'support/*' + - main paths: - docs/** - package*.json @@ -15,8 +16,7 @@ on: - .github/workflows/docs.yml pull_request: branches: - # - main - - 'support/*' + - main paths: - docs/** - package*.json @@ -25,34 +25,37 @@ on: - mkdocs.yml - .github/workflows/docs.yml env: - DOTNET_ROLL_FORWARD_ON_NO_CANDIDATE_FX: 2 + DOTNET_ROLL_FORWARD: "Major" + DOTNET_CLI_TELEMETRY_OPTOUT: 1 + DOTNET_SKIP_FIRST_TIME_EXPERIENCE: 1 + DOTNET_NOLOGO: 1 jobs: prepare: name: Prepare Build runs-on: ${{ matrix.os }} strategy: + fail-fast: false matrix: os: [windows-latest, ubuntu-latest] - fail-fast: false steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: fetch-depth: 0 - name: Cache cake frosting id: cache-cake - uses: actions/cache@v3.0.11 + uses: actions/cache@v4 with: path: run key: run-${{ runner.os }}-${{ hashFiles('./build/**') }} - name: Use cached tools id: cache-tools - uses: actions/cache@v3.0.11 + uses: actions/cache@v4 with: path: tools key: tools-${{ runner.os }}-${{ hashFiles('./build/**') }} @@ -66,52 +69,38 @@ jobs: - name: Cache Node Modules id: cache-node - uses: actions/cache@v3.0.11 + uses: actions/cache@v4 with: path: ${{ steps.cache-node-dir.outputs.dir }} key: node-${{ runner.os }}-${{ hashFiles('./package-lock.json') }} restore-keys: node-${{ runner.os }} - name: Setup .NET SDK - uses: actions/setup-dotnet@v3.0.2 + uses: actions/setup-dotnet@v4 with: - dotnet-version: '7.0.x' - dotnet-quality: 'preview' + global-json-file: global.json - - name: '[Prepare]' + name: '[Build]' if: steps.cache-cake.outputs.cache-hit != 'true' run: dotnet build build/CI.sln --configuration=Release + - + name: '[Prepare]' + shell: pwsh + run: dotnet run/build.dll --target=BuildPrepare validate: name: Validates Html - needs: [prepare] + needs: [ prepare ] runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: fetch-depth: 0 - - name: Use cached cake frosting - id: cache-cake - uses: actions/cache@v3.0.11 - with: - path: run - key: run-${{ runner.os }}-${{ hashFiles('./build/**') }} - - - name: Use cached tools - id: cache-tools - uses: actions/cache@v3.0.11 - with: - path: tools - key: tools-${{ runner.os }}-${{ hashFiles('./build/**') }} - - - name: Setup .NET SDK - uses: actions/setup-dotnet@v3.0.2 - with: - dotnet-version: '7.0.x' - dotnet-quality: 'preview' + name: Restore State + uses: ./.github/actions/artifacts-restore - name: '[Build Documentation]' shell: pwsh @@ -121,7 +110,7 @@ jobs: uses: chabad360/htmlproofer@master with: directory: ./artifacts/docs/preview - arguments: --ignore-urls /api/,/docs/ --allow-hash-href --assume-extension --disable-external + arguments: --ignore-urls /api/,/docs/ --allow-hash-href --allow-missing-href --assume-extension --disable-external --no-check_external_hash - name: '[Reviewdog Reporter]' id: reporter @@ -130,14 +119,14 @@ jobs: echo "value=$value" >> $GITHUB_OUTPUT - name: '[Remark Lint]' - uses: reviewdog/action-remark-lint@v5.6 + uses: reviewdog/action-remark-lint@v5 with: github_token: ${{ secrets.GITHUB_TOKEN }} reporter: ${{ steps.reporter.outputs.value }} publish: name: Publish docs - needs: [validate] + needs: [ validate ] runs-on: windows-latest env: GITHUB_TOKEN: ${{ secrets.RELEASE_GITHUB_TOKEN }} @@ -145,32 +134,20 @@ jobs: steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: fetch-depth: 0 - - name: Use cached cake frosting - id: cache-cake - uses: actions/cache@v3.0.11 - with: - path: run - key: run-${{ runner.os }}-${{ hashFiles('./build/**') }} - - - name: Use cached tools - id: cache-tools - uses: actions/cache@v3.0.11 - with: - path: tools - key: tools-${{ runner.os }}-${{ hashFiles('./build/**') }} + name: Restore State + uses: ./.github/actions/artifacts-restore - - name: Setup .NET SDK - uses: actions/setup-dotnet@v3.0.2 - with: - dotnet-version: '7.0.x' - dotnet-quality: 'preview' + name: '[Build Schemas]' + shell: pwsh + run: | + dotnet run/docs.dll --target=GenerateSchemas - name: '[Publish Documentation]' - if: ${{ github.event_name == 'push' }} + if: ${{ github.event_name == 'repository_dispatch' }} shell: pwsh run: dotnet run/docs.dll --target=PublishDocs - diff --git a/.github/workflows/format.yml b/.github/workflows/format.yml index 939f8213ea..2e61a314b0 100644 --- a/.github/workflows/format.yml +++ b/.github/workflows/format.yml @@ -1,15 +1,17 @@ -name: Validate Commit - +name: Code Format on: push: branches: - main - 'fix/*' - 'feature/*' + - 'poc/*' - 'support/*' paths: - '**' - '!docs/**' + - '!.github/**' + - .github/workflows/format.yml pull_request: branches: @@ -18,25 +20,40 @@ on: paths: - '**' - '!docs/**' + - '!.github/**' + - .github/workflows/format.yml permissions: contents: read +env: + DOTNET_ROLL_FORWARD: "Major" + DOTNET_CLI_TELEMETRY_OPTOUT: 1 + DOTNET_SKIP_FIRST_TIME_EXPERIENCE: 1 + DOTNET_NOLOGO: 1 + jobs: format: runs-on: ubuntu-latest name: DotNet Format steps: - - uses: actions/checkout@v3 + - + name: Checkout + uses: actions/checkout@v4 - name: Setup .NET SDK - uses: actions/setup-dotnet@v3.0.2 + uses: actions/setup-dotnet@v4 with: - dotnet-version: '7.0.x' - dotnet-quality: 'preview' + global-json-file: global.json - - name: Run Format Build solution + name: Run Format 'ci' solution run: dotnet format ./build/ --verify-no-changes - - name: Run Format GitVersion solution + name: Build 'new-cli' solution + run: dotnet build ./new-cli + - + name: Run Format 'new-cli' solution + run: dotnet format ./new-cli/ --exclude ~/.nuget/packages --verify-no-changes + - + name: Run Format 'GitVersion' solution run: dotnet format ./src/ --exclude **/AddFormats/ --verify-no-changes diff --git a/.github/workflows/homebrew.yml b/.github/workflows/homebrew.yml index 18488c5185..12cfa22056 100644 --- a/.github/workflows/homebrew.yml +++ b/.github/workflows/homebrew.yml @@ -1,9 +1,14 @@ -name: Homebrew +name: Publish to Homebrew on: workflow_dispatch: + inputs: + tag-name: + description: 'The git tag name to bump the formula to' + required: true repository_dispatch: - types: [release] + types: [ publish-release ] + permissions: contents: read @@ -14,10 +19,25 @@ jobs: name: Bump Homebrew formula runs-on: macos-latest steps: - - uses: dawidd6/action-homebrew-bump-formula@v3.8.0 - with: - # GitHub token, required, not the default one - token: ${{secrets.RELEASE_GITHUB_TOKEN}} - # Formula name, required - formula: gitversion - tag: ${{ github.event.client_payload.ref }} + - name: Get version + id: get-version + shell: pwsh + run: | + $version = "${{ github.event.client_payload.tag }}" + if ($version -eq "") { + $version = "${{ github.event.inputs.tag-name }}" + } + "version=$version" >> $env:GITHUB_OUTPUT + - + uses: mislav/bump-homebrew-formula-action@v3 + name: Bump Homebrew formula + with: + formula-name: gitversion + tag-name: ${{ steps.get-version.outputs.version }} + download-url: https://github.com/GitTools/GitVersion/archive/refs/tags/${{ steps.get-version.outputs.version }}.tar.gz + commit-message: | + {{formulaName}} {{version}} + + For additional details see https://github.com/GitTools/GitVersion/releases/tag/${{ steps.get-version.outputs.version }} + env: + COMMITTER_TOKEN: ${{ secrets.RELEASE_GITHUB_TOKEN }} \ No newline at end of file diff --git a/.github/workflows/mkdocs.yml b/.github/workflows/mkdocs.yml new file mode 100644 index 0000000000..83550f71b6 --- /dev/null +++ b/.github/workflows/mkdocs.yml @@ -0,0 +1,42 @@ +name: Markdown Update +on: + push: + +env: + DOTNET_ROLL_FORWARD: "Major" + DOTNET_CLI_TELEMETRY_OPTOUT: 1 + DOTNET_SKIP_FIRST_TIME_EXPERIENCE: 1 + DOTNET_NOLOGO: 1 + +defaults: + run: + shell: pwsh + +jobs: + docs: + name: Update Markdown (embedded snippets) + runs-on: ubuntu-latest + steps: + - + name: Checkout + uses: actions/checkout@v4 + - + name: Run MarkdownSnippets + run: | + dotnet tool install --global MarkdownSnippets.Tool + mdsnippets --write-header false + working-directory: ${{ github.workspace }}/docs/input + - + name: Check for changes + id: status + run: | + if ($null -ne (git status --porcelain)) { echo "has_changes=1"; echo "has_changes=1" >> $env:GITHUB_OUTPUT } + - + name: Push changes + run: | + git add --verbose . + git config user.name 'Artur Stolear' + git config user.email 'artur.stolear@gmail.com' + git commit -m 'Docs changes' --allow-empty + git push --force + if: steps.status.outputs.has_changes == '1' \ No newline at end of file diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index bb4e21024c..033d0c2dbd 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -1,17 +1,28 @@ name: Release on: release: - types: [published] + types: [ published ] jobs: release: - name: Trigger Build flow + name: Trigger ci flow runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 - - uses: peter-evans/repository-dispatch@v2 + - + name: Checkout + uses: actions/checkout@v4 + - + name: Get version + id: get-version + shell: pwsh + run: | + # Finding the version from release tag + $VERSION="${{ github.ref }}".Replace("refs/tags/", "") + "version=$VERSION" >> $env:GITHUB_OUTPUT + - + uses: peter-evans/repository-dispatch@v3 with: token: ${{ secrets.RELEASE_GITHUB_TOKEN }} repository: ${{ github.repository }} - event-type: release - client-payload: '{"ref": "${{ github.ref }}", "sha": "${{ github.sha }}"}' + event-type: ci-release + client-payload: '{"ref": "${{ github.ref }}", "sha": "${{ github.sha }}", "tag": "${{ steps.get-version.outputs.version }}"}' \ No newline at end of file diff --git a/.github/workflows/stale.yml b/.github/workflows/stale.yml new file mode 100644 index 0000000000..b6b44be7cf --- /dev/null +++ b/.github/workflows/stale.yml @@ -0,0 +1,43 @@ +name: Stale Issues +on: + workflow_dispatch: + schedule: + - cron: '0 11 * * *' + +permissions: + # contents: write # only for delete-branch option + issues: write + pull-requests: write + +jobs: + stale: + runs-on: ubuntu-latest + steps: + - uses: actions/stale@v9 + with: + operations-per-run: 100 + # set 'stale' label + stale-issue-label: stale + # remove 'stale' label on update + remove-issue-stale-when-updated: true + labels-to-remove-when-unstale: stale + # only stale the issues + stale-issue-message: > + This issue has been automatically marked as stale because it has not had + recent activity. After 30 days from now, it will be closed if no further + activity occurs. + close-issue-message: > + This issue was closed because it has been stalled for 30 days with no activity. + Thank you for your contributions + days-before-issue-stale: 90 + days-before-issue-close: 30 + # skip issues that have a milestone + exempt-all-issue-milestones: true + # skip those that are assigned + exempt-all-issue-assignees: true + # skip issues with label 'pinned' + exempt-issue-labels: pinned,security,failing test case,help wanted + + # do not stale PRs + days-before-pr-stale: -1 + days-before-pr-close: -1 diff --git a/.github/workflows/winget.yml b/.github/workflows/winget.yml new file mode 100644 index 0000000000..1f9e75b3ce --- /dev/null +++ b/.github/workflows/winget.yml @@ -0,0 +1,40 @@ +name: Publish to Winget + +on: + workflow_dispatch: + inputs: + tag-name: + description: 'The git tag name to bump the formula to' + required: true + repository_dispatch: + types: [ publish-release ] + +permissions: + contents: read + +jobs: + homebrew: + permissions: + contents: none + name: Bump winget manifest + runs-on: ubuntu-latest + steps: + - name: Get version + id: get-version + shell: pwsh + run: | + $version = "${{ github.event.client_payload.tag }}" + if ($version -eq "") { + $version = "${{ github.event.inputs.tag-name }}" + } + + $url = "https://github.com/GitTools/GitVersion/releases/download/{0}/gitversion-win-{1}-{0}.zip" + $urls = @(($url -f $version, "x64"), ($url -f $version, "arm64")) -Join " " + + $run_args = "update GitTools.GitVersion --version $version --urls $urls --token ${{ secrets.RELEASE_GITHUB_TOKEN }} --submit" + "version=$version" >> $env:GITHUB_OUTPUT + "run_args=$run_args" >> $env:GITHUB_OUTPUT + + - uses: michidk/run-komac@v2.1.0 + with: + args: '${{ steps.get-version.outputs.run_args }}' \ No newline at end of file diff --git a/.gitignore b/.gitignore index 53a1d1e91a..e5775f626a 100644 --- a/.gitignore +++ b/.gitignore @@ -35,6 +35,7 @@ *.dotCover *.orig *~ +msbuild.binlog ## If you have NuGet Package Restore enabled, uncomment this packages/ @@ -117,7 +118,8 @@ releaseArtifacts .dotnet artifacts !build/artifacts -src/Docker/**/content +build/docker/nuget +src/PublicAPI.empty.txt !**/*.cake .DS_Store @@ -126,9 +128,11 @@ src/Docker/**/content config.wyam.dll config.wyam.hash config.wyam.packages.xml -/tests/integration/core/build -/tests/integration/full/build +/tests/integration/build docs/output # NPM node_modules + +dogfood/ +new-cli/log.txt diff --git a/.markdownlint.json b/.markdownlint.json index 7ab1720b67..08d535e1cb 100644 --- a/.markdownlint.json +++ b/.markdownlint.json @@ -1,3 +1,4 @@ { - "MD026": false + "MD026": false, + "MD041": false } diff --git a/BREAKING_CHANGES.md b/BREAKING_CHANGES.md index a78b5d04a8..9f0db2b22b 100644 --- a/BREAKING_CHANGES.md +++ b/BREAKING_CHANGES.md @@ -1,8 +1,81 @@ +## v6.0.0 + +### Platforms + +* Drop support for .NET Framework 4.8, .NET Core 3.1 and .NET 5.0. Changed the project targets to .NET 6.0 or later. + +### Caching + +* Refactor caching system in GitVersion to use json files instead of yaml files. This change is not backwards compatible with the old caching system. + +### Configuration changes: + +* The configuration properties `continuous-delivery-fallback-tag`, `tag-number-pattern`, and `tag` were renamed to `continuous-delivery-fallback-label`, `label-number-pattern`, and `label` respectively. `tag-pre-release-weight` and `tag-prefix` remained as they were as they are referring to a Git tag. +* When using a commit message that matches **both** `*-version-bump-message` and `no-bump-message`, there is no increment for that commit. In other words, `no-bump-message` now takes precedence over `*-version-bump-message`. +* The fallback version strategy now returns `0.0.0` and is flagged with `ShouldIncrement` equal to `true`. This yields the version `0.1.0` on the `develop` branch (`IncrementStrategy.Minor` by default) and `0.0.1` on the `main` branch (`IncremetnStrategy.Patch` by default). +* The current branch (child) inherits its configuration from the source (parent) branch if the `increment` strategy is set to `Inherit`. This makes branch configuration recursive, simpler, more intuitive, more flexible, and more robust. +* Instead of having a single effective configuration, we now have one effective configuration per branch where the increment strategy is not set to `inherit`. +* The new implementation of the branch configuration inheritance affects per default only the pull-requests, hotfix and feature branches. In this case the next version will be generated like the child branch is not existing and the commits have been made on the source branch. + * The following example illustrates this behavior. On the feature branch the semantic version `1.1.0-just-a-test.1+2` will now be generated instead of version `1.0.0-just-a-test.1+3` previously: + + ``` log + * 1f1cfb4 52 minutes ago (HEAD -> feature/just-a-test) + * 1f9654d 54 minutes ago (release/1.1.0) + * be72411 56 minutes ago (develop) + * 14800ff 58 minutes ago (tag: 1.0.0, main) + ``` + +* A new `unknown` branch magic string has been introduced to give the user the possibility to specify the branch configuration for a branch which is not known. A branch is not known if only the regular expression of the branch configuration with the name `unknown` is matching. Please notice that this branch configuration behaves like any other branch configurations. +* Additional `fallback` branch configuration properties have been introduced at the root to define base properties which will be inherit to the branch configurations. That means if no other branch configuration in the inheritance line defines the given property the fallback property applies. Notice that the inheritance tree can be controlled using the increment strategy property in the branch configuration section. + * The following example illustrates this behavior. The hotfix branch configuration overrides the main branch configuration and the result overrides the fallback branch configuration. + + ``` log + * 1f1cfb4 52 minutes ago (HEAD -> hotfix/just-a-test) + * 14800ff 58 minutes ago (tag: 1.0.0, main) + ``` + +* When overriding the configuration with e.g. GitVersion.yaml the software distinguishes between properties who are not existent and properties who are `null`. This is especially important if the user wants to define branch related configuration which are marked with `increment` strategy `Inherit`. +* Following root configuration properties have been removed: + * continuous-delivery-fallback-tag +* A new branch related property with name `track-merge-message` has been introduced. 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. In this scenario the merge message will be interpreted as a next version `1.0.0` when `track-merge-message` is set to `true` otherwise `0.0.1`. +* The pre-release tags are only considered when they are matching with the label name of the branch. This has an effect on the way how the `CommitCountSource` will be determined. +* The process of increasing the version with bump message when `CommitMessageIncrementing` is enabled and increment strategy is `None` has been changed. +* A new configuration property with name `version-in-branch-pattern` has been introduced. This setting only applies on branches where the option `is-release-branch` is set to `true`. Please notice that the branch name needs to be defined after the version number by default (instead of `support/lts-2.0.0` please name the branch like `support/2.0.0-lts`). +* The `is-release-branch` property of the `hotfix` branch setting has been changed from `false` to `true`. If present the hotfix number will be considered now by default. +* In the GitHub and the Git Flow workflows the `label` property is by default set to an empty string on the `main` branch. This yields to a pre-release version on `main` with an empty tag. Instead of for instance `1.0.1+46` GitVersion generates the full semantic version `1.0.1-46` instead. This behavior can be changed to generate only stable versions (no pre-release version) with setting the label to `null` (Please keep in mind that the `label` property on root needs to be set to `null` as well, otherwise the fallback applies). This change is caused by issue #2347. +* The `useBranchName` magic string has been removed. Instead use `{BranchName}` for `label`. +* The `BranchPrefixToTrim` configuration property has been removed. `RegularExpression` is now used to capture named groups instead. + * Default `RegularExpression` for feature branches is changed from `^features?[/-]` to `^features?[/-](?<BranchName>.+)` to support using `{BranchName}` out-of-the-box + * Default `RegularExpression` for unknown branches is changed from `.*` to `(?<BranchName>.+)` to support using `{BranchName}` out-of-the-box +* The `Mainline` mode and the related implementation has been removed completely. The new `Mainline` version strategy should be used instead. +* The `Mainline` version strategy doesn't support downgrading the increment for calculating the next version. This is the case if e.g. a bump messages has been defined which is lower than the branch increment. +* The branch related property `is-mainline` in the configuration system has been renamed to `is-main-branch` +* The versioning mode has been renamed to deployment mode and consists of following values: + * ManualDeployment (previously ContinuousDelivery) + * ContinuousDelivery (previously ContinuousDeployment) + * ContinuousDeployment (new) +* At the configuration root level, a new array called `strategies` has been introduced, which can consist of on or more following values: + * ConfiguredNextVersion + * MergeMessage + * TaggedCommit + * TrackReleaseBranches + * VersionInBranchName + * Mainline +* The initialization wizard has been removed. +* On the `develop`, `release` and `hotfix` branch the introduced branch related property `prevent-increment.when-current-commit-tagged` has been set to `false` to get the incremented instead of the tagged semantic version. +* When setting the "ignore commits before" parameter to a future value, an exception will occur if no commits are found on the current branch. This behavior mimics that of an empty repository. +* On the `GitFlow` workflow the increment property has been changed: + * in branch `release` from `None` to `Minor` and + * in branch `hotfix` from `None` to `Patch` +* On the `GitHubFlow` workflow the increment property has been changed in branch `release` from `None` to `Patch`. +* When creating a branch with name `hotfix/next` (by using the `GitFlow` workflow) or `release/next` (by the `GitHubFlow` workflow) the resulting version will yield to a patched version per default. +* If you have a tag `1.0.0` on `main` and branch from `main` to `release/1.0.1` then the next version number will be `1.1.0` when using the `GitFlow` workflow. This behavior is expected (but different compared to the `GitHubFlow` workflow) because on the `GitFlow` workflow you have an addition branch configuration with name hotfix where `is-release-branch` is set to `true`. That means if you want `1.0.1` as a next version you need to branch to `hotfix/1.0.1` or `hotfix/next`. On the other hand if you use the `GitHubFlow` workflow the next version number will be `1.0.1` because the increment on the `release` branch is set to `Patch`. + ## v5.0.0 -* Version numbers in branches other than `release` branches are no longer +* Version numbers in branches other than `release` branches are no longer considered as a version source by default. Implemented in [#1541][pr-1541]. -* [#1581][pr-1581] folds `GitTools.Core` back into GitVersion to make +* [#1581][pr-1581] folds `GitTools.Core` back into GitVersion to make maintaining GitVersion easier. ## v4.0.0 @@ -12,35 +85,35 @@ When using GitFlow, a few things have changed. Hopefully the new settings just work for you -* `develop` has pre-release tag of `alpha` now, not unstable. -* `develop` will bump as soon as a `release` branch is created. -* Look at the [GitFlow examples][gitflow] for details of how it works now. +* `develop` has pre-release tag of `alpha` now, not unstable. +* `develop` will bump as soon as a `release` branch is created. +* Look at the [GitFlow examples][gitflow] for details of how it works now. ### Configuration Changes -* `GitVersionConfig.yaml` is deprecated in favor of `GitVersion.yml`. -* Regular expressions are no longer used as keys in branch config - * We have named branches, and introduced a `regex` config which you can +* `GitVersionConfig.yaml` is deprecated in favor of `GitVersion.yml`. +* Regular expressions are no longer used as keys in branch config + * We have named branches, and introduced a `regex` config which you can override. - * The default keys are: `master`, `develop`, `feature`, `release`, `pull-request`, + * The default keys are: `master`, `develop`, `feature`, `release`, `pull-request`, `hotfix` and `support` - * Just run `GitVersion.exe` in your project directory and it will tell you + * Just run `GitVersion.exe` in your project directory and it will tell you what to change your config keys to - * For example, `dev(elop)?(ment)?$` is now just `develop`, we suggest not + * For example, `dev(elop)?(ment)?$` is now just `develop`, we suggest not overring regular expressions unless you really want to use a different convention. -* `source-branches` added as a configuration option for branches, it helps +* `source-branches` added as a configuration option for branches, it helps GitVersion pick the correct source branch ## v3.0.0 -* NextVersion.txt has been deprecated, only `GitVersionConfig.yaml` is supported -* `AssemblyFileSemVer` variable removed, `AssemblyVersioningScheme` configuration +* NextVersion.txt has been deprecated, only `GitVersionConfig.yaml` is supported +* `AssemblyFileSemVer` variable removed, `AssemblyVersioningScheme` configuration value makes this variable obsolete -* Variables `ClassicVersion` and `ClassicVersionWithTag` removed -* MSBuild task arguments (`AssemblyVersioningScheme`, `DevelopBranchTag`, +* Variables `ClassicVersion` and `ClassicVersionWithTag` removed +* MSBuild task arguments (`AssemblyVersioningScheme`, `DevelopBranchTag`, `ReleaseBranchTag`, `TagPrefix`, `NextVersion`) have been removed, use `GitVersionConfig.yaml` instead -* GitVersionTask's `ReleaseDateAttribute` no longer exists +* GitVersionTask's `ReleaseDateAttribute` no longer exists [gitflow]: https://gitversion.net/docs/learn/branching-strategies/gitflow-examples_complete [pr-1541]: https://github.com/GitTools/GitVersion/pull/1541 diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 20248c6335..fa2ab0c87e 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -2,10 +2,10 @@ We love contributions to get started contributing you might need: -* [Get started with git](http://rogerdudler.github.io/git-guide) -* [How to create a pull request](https://help.github.com/articles/using-pull-requests) -* [An issue to work on](https://github.com/GitTools/GitVersion/labels/up-for-grabs) - We are on [Up for grabs](http://up-for-grabs.net/), our up for grabs issues are tagged `up-for-grabs` -* An understanding of our [architecture](http://gitversion.net/docs/learn/how-it-works#architecture) and how [we write tests](#writing-tests) +* [Get started with git](https://rogerdudler.github.io/git-guide) +* [How to create a pull request](https://help.github.com/articles/using-pull-requests) +* [An issue to work on](https://github.com/GitTools/GitVersion/labels/up-for-grabs) - We are on [Up for grabs](https://up-for-grabs.net/), our up for grabs issues are tagged `up-for-grabs` +* An understanding of our [architecture](https://gitversion.net/docs/learn/how-it-works#architecture) and how [we write tests](#writing-tests) Once you know how to create a pull request and have an issue to work on, just post a comment saying you will work on it. If you end up not being able to complete the task, please post another comment so others can pick it up. @@ -14,16 +14,16 @@ Issues are also welcome, [failing tests](#writing-tests) are even more welcome. ## Contribution Guidelines -* Try to use feature branches rather than developing on main. -* Please include tests covering the change. -* The documentation is stored in the repository under the [`docs`](docs) folder. +* Try to use feature branches rather than developing on main. +* Please include tests covering the change. +* The documentation is stored in the repository under the [`docs`](docs) folder. Have a look at the [documentation readme file](docs/readme.md) for guidance on how to improve the documentation and please include documentation updates with your PR. ## How it works -See [how it works](http://gitversion.net/docs/learn/how-it-works/) in GitVersion's documentation +See [how it works](https://gitversion.net/docs/learn/how-it-works) in GitVersion's documentation ## Writing Tests @@ -39,25 +39,38 @@ Find where your issue would logically sit. Or create a new scenario class if it We are currently using NUnit, so just create a descriptive test method and attribute it with `[Test]` -### 3. Use a fixture +### 3. Create a configuration -We have a few fixtures for different scenarios. +We use a builder pattern to create a configuration. You can use the `GitFlowConfigurationBuilder` or `GitHubConfigurationBuilder` or `EmptyConfigurationBuilder` to create a configuration builder. + +```csharp +var configurationBuilder = GitFlowConfigurationBuilder.New; +``` -* `EmptyRepositoryFixture` - Gives you an empty git repo to start with -* `RemoteRepositoryFixture` - A local repo tracking a test remote repository. The remote repo is available through the `Repository` property, the local is accessible via `LocalRepository` -* `BaseGitFlowRepositoryFixture` - A repo setup for GitFlow (has a develop branch checked out ready to go) +We can then customize the configuration by chaining methods of the builder. At the end we build the configuration. -You can use a fixture by just `using` it. Like this +For example: ```csharp -using (var fixture = new EmptyRepositoryFixture(new Config())) -{ -} +var configuration = configurationBuilder + .WithDeploymentMode(DeploymentMode.ContinuousDeployment) + .WithNextVersion("1.0.0") + .Build(); ``` -### 4. Customize config +### 4. Use a fixture -If you are using non-default configuration just modify the `Config` class before creating the fixture +We have a few fixtures for different scenarios. + +* `EmptyRepositoryFixture` - Gives you an empty git repo to start with +* `RemoteRepositoryFixture` - A local repo tracking a test remote repository. The remote repo is available through the `Repository` property, the local is accessible via `LocalRepository` +* `BaseGitFlowRepositoryFixture` - A repo setup for GitFlow (has a develop branch checked out ready to go) + +You can use a fixture by just `using` it. Like this + +```csharp +using var repo = new EmptyRepositoryFixture(); +``` ### 5. Writing the scenario @@ -72,7 +85,7 @@ fixture.Repository.Checkout("feature-test"); fixture.Repository.MakeACommit(); fixture.Repository.MakeCommits(4); -fixture.AssertFullSemver("1.0.1-test.1+5"); +fixture.AssertFullSemver("1.0.1-test.1-5", configuration); ``` The last line is the most important. `AssertFullSemver` will run GitVersion and assert that the full SemVer it calculates is what you expect. @@ -81,47 +94,49 @@ The last line is the most important. `AssertFullSemver` will run GitVersion and Even better include the fix, but a failing test is a great start -## Build / Release Process - -We use Cake for our build and deployment process. The way the build / release process is setup is: - -1. We build releasable artifacts on AppVeyor -2. Login to AppVeyor -3. Deploy the latest main build - ![docs/input/docs/img/release-1-deploy.png](docs/input/docs/img/release-1-deploy.png) -4. Choose GitVersion release, when you press deploy it will create a _non-released_ GitHub release, this _will not_ create a Git tag. This step is so we can validate the release and release notes before pushing the button. - ![docs/input/docs/img/release-2-deploy.png](docs/input/docs/img/release-2-deploy.png) -5. All the artifacts should upload nicely - ![docs/input/docs/img/release-3-deploy.png](docs/input/docs/img/release-3-deploy.png) -6. Head over to GitHub releases, you should have a draft release, download a copy of the release notes - ![docs/input/docs/img/release-4-deploy.png](docs/input/docs/img/release-4-deploy.png) -7. Edit the release and do the following: - 1. Remove the build metadata from the tag and title (the + and everything after it) - 2. Paste the downloaded release notes in, you can clean them up if you want otherwise there may be closed issues which were questions etc. - 3. Tick the pre-release box if it's pre-release - 4. Press Publish -8. Publishing tags (a git tag) the release commit, this will trigger another appveyor build which only builds tags, this build uses deploy.cake. It downloads the artifacts from that GitHub release, then performs the release - -## Docker - -It is a manual release step after the release now, first download the appropriate ZIP and put into a `releaseArtifacts` folder in the GitVersion repository, then run: - -```bash -docker build . --build-arg GitVersionZip=GitVersion_<VERSION>.zip --tag gittools/gitversion -``` +## Release Process + +We use Cake for our build and deployment process. The way the release process is setup is: + +1. We build releasable artifacts with GitHub Actions +2. We create a milestone for the release if it's not already created. Our milestones are named using the semver. + For example `5.12.0` or `6.0.0-beta.2` +3. We move all the closed issues and closed pull requests that are going to be included in the release to the milestone. +4. We check that all the issues and pull requests that are going to be included in the release have a label assigned, + otherwise it will fail the release. +5. We create a release in the GitHub UI, and create a tag and name it using the milestone name. For example `5.12.0` or `6.0.0-beta.2` +6. We specify if the release is a pre-release or latest release in the GitHub UI. +7. We publish the release. +8. The GitHub Actions will create a GitHub release and publish the artifacts to NuGet, Chocolatey, Docker, Homebrew + and other distribution channels. +9. The issues and pull requests will get updated with message specifying in which release it was included. ## Code Style In order to apply the code style defined by by the `.editorconfig` file you can use [`dotnet-format`](https://github.com/dotnet/format). -1. Install [`dotnet-format`](https://github.com/dotnet/format) as a global tool: +Change to the root folder of the GitVersion repository and use the following command to apply the code style: ```shell -dotnet tool install -g dotnet-format +dotnet format ./src/ --exclude **/AddFormats/ ``` -2. Change to the root folder of the GitVersion repository and use the following command to apply the code style: +## Documentation + +The documentation is stored in the repository under the [`docs`](docs) folder. +Have a look at the [documentation readme file](docs/readme.md) for guidance. + +In order to check locally how the documentation looks like you can use the following command: + +```shell +./build.ps1 -Stage docs -Target PreviewDocs +``` + +## Schemas generation + +If there are changes to the GitVersionVariables or to the GitVersionConfiguration, the following command should be executed to update the schema files: ```shell -dotnet format ./ --folder --exclude **/AddFormats/ --fix-codestyle +./build.ps1 -Stage build -Target BuildPrepare +./build.ps1 -Stage docs -Target GenerateSchemas ``` diff --git a/GitReleaseManager.yml b/GitReleaseManager.yml index 438e184523..5a85f67383 100644 --- a/GitReleaseManager.yml +++ b/GitReleaseManager.yml @@ -1,16 +1,31 @@ issue-labels-include: -- Breaking change -- Feature -- Bug -- Improvement -- Documentation -- Dependencies +- breaking change +- bug +- dependencies +- documentation +- feature +- improvement issue-labels-exclude: -- Build +- build issue-labels-alias: -- name: Documentation +- name: breaking change + header: Breaking change + plural: Breaking changes +- name: bug + header: Bug + plural: Bugs +- name: dependencies + header: Dependencies + plural: Dependencies +- name: documentation header: Documentation plural: Documentation +- name: feature + header: Features + plural: Features +- name: improvement + header: Improvements + plural: Improvements create: include-sha-section: true sha-section-heading: "SHA256 Hashes of the release artifacts" diff --git a/GitVersion.yml b/GitVersion.yml index 8cb4734ffc..7c62fc859e 100644 --- a/GitVersion.yml +++ b/GitVersion.yml @@ -1,6 +1,7 @@ -assembly-versioning-scheme: MajorMinorPatch +workflow: GitFlow/v1 +mode: ManualDeployment branches: main: - tag: beta + label: rc support: - tag: beta + label: beta diff --git a/README.md b/README.md index 9ffab598c6..a68504eb4b 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -![GitVersion – From git log to SemVer in no time][banner] +# ![GitVersion – From git log to SemVer in no time][banner] Versioning when using Git, solved. GitVersion looks at your git history and works out the [Semantic Version][semver] of the commit being built. @@ -8,17 +8,17 @@ works out the [Semantic Version][semver] of the commit being built. [![codecov][codecov-badge]][codecov] [![Gitter][gitter-badge]][gitter] -| Artifact | Stable | | -| :------------------------- | :----------------------------------------------------------------- | - | -| **GitHub Release** | [![GitHub release][gh-rel-badge]][gh-rel] | -| **GitVersion.Portable** | [![Chocolatey][choco-badge]][choco] | -| **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 | -| **Homebrew** | [![homebrew][brew-badge]][brew] | +| Artifact | Stable | +|:---------------------------|:-------------------------------------------------------------------| +| **GitHub Release** | [![GitHub release][gh-rel-badge]][gh-rel] | +| **GitVersion.Portable** | [![Chocolatey][choco-badge]][choco] | +| **GitVersion.Tool** | [![NuGet][gvgt-badge]][gvgt] | +| **GitVersion.MsBuild** | [![NuGet][gvt-badge]][gvt] | +| **Homebrew** | [![homebrew][brew-badge]][brew] | +| **Winget** | [![winget][winget-badge]][winget] | | **Azure Pipeline Task** | [![Azure Pipeline Task][az-pipeline-task-badge]][az-pipeline-task] | -| **Github Action** | [![Github Action][gh-actions-badge]][gh-actions] | -| **Docker** | [![Docker Pulls][dockerhub-badge]][dockerhub] | +| **Github Action** | [![Github Action][gh-actions-badge]][gh-actions] | +| **Docker** | [![Docker Pulls][dockerhub-badge]][dockerhub] | ## Compatibility @@ -26,13 +26,13 @@ GitVersion works on Windows, Linux, and Mac. ## Quick Links -* [Documentation][docs] -* [Contributing][contribute] -* [Why GitVersion][why] -* [Usage][usage] -* [How it works][how] -* [FAQ][faq] -* [Who is using GitVersion][who] +* [Documentation][docs] +* [Contributing][contribute] +* [Why GitVersion][why] +* [Usage][usage] +* [How it works][how] +* [FAQ][faq] +* [Who is using GitVersion][who] ## GitVersion in action! @@ -40,8 +40,8 @@ GitVersion works on Windows, Linux, and Mac. You are seeing: -* Pull requests being built as pre-release builds -* A branch called `release-1.0.0` producing beta v1 packages +* Pull requests being built as pre-release builds +* A branch called `release-1.0.0` producing beta v1 packages ## Icon @@ -49,13 +49,13 @@ You are seeing: designed by [David Chapman][app-icon-author] from The Noun Project. -[semver]: http://semver.org +[semver]: https://semver.org [gitter]: https://gitter.im/GitTools/GitVersion?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge [gitter-badge]: https://badges.gitter.im/Join+Chat.svg [azure-pipeline]: https://dev.azure.com/GitTools/GitVersion/_build/latest?definitionId=1 [azure-pipeline-badge]: https://dev.azure.com/GitTools/GitVersion/_apis/build/status/GitTools.GitVersion [github-actions]: https://github.com/GitTools/GitVersion/actions -[github-actions-badge]: https://github.com/GitTools/GitVersion/workflows/Build/badge.svg +[github-actions-badge]: https://github.com/GitTools/GitVersion/workflows/CI/badge.svg [codecov]: https://codecov.io/gh/GitTools/GitVersion [codecov-badge]: https://codecov.io/gh/GitTools/GitVersion/branch/main/graph/badge.svg [docs]: https://gitversion.net/docs/ @@ -66,12 +66,12 @@ from The Noun Project. [gvt]: https://www.nuget.org/packages/GitVersion.MsBuild [gvt-badge]: https://img.shields.io/nuget/v/GitVersion.MsBuild.svg?logo=nuget [gitversiontask]: https://www.nuget.org/packages/GitVersionTask/ -[gvcl]: https://www.nuget.org/packages/GitVersion.CommandLine -[gvcl-badge]: https://img.shields.io/nuget/v/GitVersion.CommandLine.svg?logo=nuget [gvgt]: https://www.nuget.org/packages/GitVersion.Tool [gvgt-badge]: https://img.shields.io/nuget/v/GitVersion.Tool.svg?logo=nuget [brew]: https://formulae.brew.sh/formula/gitversion [brew-badge]: https://img.shields.io/homebrew/v/gitversion.svg?logo=homebrew +[winget]: https://github.com/microsoft/winget-pkgs/tree/master/manifests/g/GitTools/GitVersion +[winget-badge]: https://img.shields.io/badge/winget-v5.12.0-blue.svg?logo=microsoft [dockerhub]: https://hub.docker.com/r/gittools/gitversion/ [dockerhub-badge]: https://img.shields.io/docker/pulls/gittools/gitversion.svg?logo=docker [az-pipeline-task]: https://marketplace.visualstudio.com/items?itemName=gittools.gittools @@ -87,4 +87,4 @@ from The Noun Project. [gv-in-action]: https://raw.githubusercontent.com/GitTools/GitVersion/master/docs/input/docs/img/README.png [banner]: https://raw.githubusercontent.com/GitTools/graphics/master/GitVersion/banner-1280x640.png [app-icon]: https://thenounproject.com/term/tree/13389/ -[app-icon-author]: http://thenounproject.com/david.chapman +[app-icon-author]: https://thenounproject.com/david.chapman diff --git a/SECURITY.md b/SECURITY.md index 6e0e279f39..6e07e80a06 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -17,13 +17,13 @@ You should receive a response within 24 hours. If for some reason you do not, pl Please include the requested information listed below (as much as you can provide) to help us better understand the nature and scope of the possible issue: -* Type of issue (e.g. buffer overflow, SQL injection, cross-site scripting, etc.) -* Full paths of source file(s) related to the manifestation of the issue -* The location of the affected source code (tag/branch/commit or direct URL) -* Any special configuration required to reproduce the issue -* Step-by-step instructions to reproduce the issue -* Proof-of-concept or exploit code (if possible) -* Impact of the issue, including how an attacker might exploit the issue +* Type of issue (e.g. buffer overflow, SQL injection, cross-site scripting, etc.) +* Full paths of source file(s) related to the manifestation of the issue +* The location of the affected source code (tag/branch/commit or direct URL) +* Any special configuration required to reproduce the issue +* Step-by-step instructions to reproduce the issue +* Proof-of-concept or exploit code (if possible) +* Impact of the issue, including how an attacker might exploit the issue This information will help us triage your report more quickly. diff --git a/azure-pipelines.yml b/azure-pipelines.yml deleted file mode 100644 index 5f6d29654a..0000000000 --- a/azure-pipelines.yml +++ /dev/null @@ -1,124 +0,0 @@ -trigger: - branches: - include: - - main - - fix/* - - feature/* -pr: - branches: - include: - - main - -variables: - DOTNET_SKIP_FIRST_TIME_EXPERIENCE: 'true' - DOTNET_CLI_TELEMETRY_OPTOUT: 'true' - -stages: -- stage: Build - displayName: 'Build' - jobs: - - job: Build - strategy: - matrix: - 'Windows': - VM_IMAGE: 'windows-latest' - 'Linux': - VM_IMAGE: 'ubuntu-latest' - 'macOS': - VM_IMAGE: 'macOS-latest' - pool: - vmImage: $(VM_IMAGE) - steps: - - template: .azurepipelines/build.yml -- stage: Test - displayName: 'Unit Test' - dependsOn: [] - jobs: - - job: Test - strategy: - matrix: - 'Windows': - VM_IMAGE: 'windows-latest' - 'Linux': - VM_IMAGE: 'ubuntu-latest' - 'macOS': - VM_IMAGE: 'macOS-latest' - pool: - vmImage: $(VM_IMAGE) - steps: - - template: .azurepipelines/test.yml - -- stage: Artifact_Linux_Test - displayName: 'Artifacts Linux test' - dependsOn: - - Build - - Test - condition: succeeded() - jobs: - - template: .azurepipelines/artifacts-linux-test.yml - parameters: - name: Linux - vmImage: 'ubuntu-latest' - distros: [ alpine.3.12-x64, centos.7-x64, centos.8-x64, debian.9-x64, debian.10-x64, fedora.33-x64, ubuntu.16.04-x64, ubuntu.18.04-x64, ubuntu.20.04-x64 ] - dotnetVersions: [ '3.1', '5.0' ] - -- stage: Artifact_Windows_Test - displayName: 'Artifacts Windows test' - dependsOn: - - Build - - Test - condition: succeeded() - jobs: - - template: .azurepipelines/artifacts-windows-test.yml - -- stage: Docker - displayName: 'Docker Build & Test' - dependsOn: - - Artifact_Linux_Test - - Artifact_Windows_Test - condition: succeeded() - jobs: - - template: .azurepipelines/docker.yml - parameters: - name: Linux - vmImage: 'ubuntu-latest' - distros: [ alpine.3.12-x64, centos.7-x64, centos.8-x64, debian.9-x64, debian.10-x64, fedora.33-x64, ubuntu.16.04-x64, ubuntu.18.04-x64, ubuntu.20.04-x64 ] - dotnetVersions: [ '3.1', '5.0' ] - -- stage: Publish - displayName: 'Publish' - dependsOn: - - Artifact_Linux_Test - - Artifact_Windows_Test - condition: succeeded() - jobs: - - job: Publish - pool: - vmImage: windows-latest - strategy: - matrix: - CI: - TASK_NAME: 'CI' - NuGet: - TASK_NAME: 'NuGet' - Chocolatey: - TASK_NAME: 'Chocolatey' - # Documentation: - # TASK_NAME: 'Documentation' - steps: - - template: .azurepipelines/publish.yml - parameters: - taskName: $(TASK_NAME) - -- stage: Release - displayName: 'Release' - dependsOn: - - Docker - - Publish - condition: succeeded() - jobs: - - job: Release - pool: - vmImage: windows-latest - steps: - - template: .azurepipelines/release.yml diff --git a/build.ps1 b/build.ps1 old mode 100644 new mode 100755 index 65007bc6be..0962436bef --- a/build.ps1 +++ b/build.ps1 @@ -1,4 +1,4 @@ -#!/usr/bin/pwsh +#!/usr/bin/env pwsh <# .PARAMETER Stage The build stage to execute. @@ -43,13 +43,30 @@ $Arguments = @{ exclusive=$Exclusive; nuget_useinprocessclient=$true; }.GetEnumerator() | ForEach-Object { - if ($_.value -ne "") { "--{0}=`"{1}`"" -f $_.key, $_.value } + if ($($_.Key -ceq "dryrun") -or ($_.Key -ceq "exclusive")) { + if ($_.Value -eq $true) { + # switches must not be assigned true or false, but must be passed to indicate true. + "--{0}" -f $_.Key + } + } + else { + if ($_.Value -cne "") { + if ($_.Value -as [string] -contains " ") { + $_.Value = "$($_.Value)" # if it contains spaces, enclose it. + } + "--{0}={1}" -f $_.Key, $_.Value + } + } }; +$Arguments | Join-String -Separator " " | Write-Verbose + # Start Cake Write-Host "Running build stage $Stage..." -& dotnet run --project build/$Stage/$Stage.csproj -- $Arguments $ScriptArgs +$cmdline = "& dotnet run --project build/$Stage/$Stage.csproj -- $Arguments $ScriptArgs" +Write-Verbose $cmdline +Invoke-Command -ScriptBlock ([scriptblock]::Create($cmdline)) if ($env:APPVEYOR) { $host.SetShouldExit($LASTEXITCODE) diff --git a/build/.run/Artifacts DotnetTool Test.run.xml b/build/.run/Artifacts DotnetTool Test.run.xml index b79166a340..d23b2b8ed0 100644 --- a/build/.run/Artifacts DotnetTool Test.run.xml +++ b/build/.run/Artifacts DotnetTool Test.run.xml @@ -1,9 +1,12 @@ <component name="ProjectRunConfigurationManager"> <configuration default="false" name="Artifacts DotnetTool Test" type="DotNetProject" factoryName=".NET Project" folderName="Artifacts"> <option name="EXE_PATH" value="$PROJECT_DIR$/../run/artifacts.exe" /> - <option name="PROGRAM_PARAMETERS" value="--target=ArtifactsDotnetToolTest --arch=amd64 --docker_dotnetversion=6.0 --docker_distro=debian.11" /> + <option name="PROGRAM_PARAMETERS" value="--target=ArtifactsDotnetToolTest --arch=amd64 --docker_dotnetversion=8.0 --docker_distro=alpine.3.17" /> <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$/.." /> <option name="PASS_PARENT_ENVS" value="1" /> + <envs> + <env name="DOTNET_ROLL_FORWARD" value="Major" /> + </envs> <option name="USE_EXTERNAL_CONSOLE" value="0" /> <option name="USE_MONO" value="0" /> <option name="RUNTIME_ARGUMENTS" value="" /> @@ -12,9 +15,9 @@ <option name="PROJECT_ARGUMENTS_TRACKING" value="1" /> <option name="PROJECT_WORKING_DIRECTORY_TRACKING" value="0" /> <option name="PROJECT_KIND" value="DotNetCore" /> - <option name="PROJECT_TFM" value="net6.0" /> + <option name="PROJECT_TFM" value="net8.0" /> <method v="2"> <option name="Build" /> </method> </configuration> -</component> +</component> \ No newline at end of file diff --git a/build/.run/Artifacts Executable Test.run.xml b/build/.run/Artifacts Executable Test.run.xml index 260a2b5727..e28ceedea3 100644 --- a/build/.run/Artifacts Executable Test.run.xml +++ b/build/.run/Artifacts Executable Test.run.xml @@ -4,6 +4,9 @@ <option name="PROGRAM_PARAMETERS" value="--target=ArtifactsExecutableTest" /> <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$/.." /> <option name="PASS_PARENT_ENVS" value="1" /> + <envs> + <env name="DOTNET_ROLL_FORWARD" value="Major" /> + </envs> <option name="USE_EXTERNAL_CONSOLE" value="0" /> <option name="USE_MONO" value="0" /> <option name="RUNTIME_ARGUMENTS" value="" /> @@ -12,9 +15,9 @@ <option name="PROJECT_ARGUMENTS_TRACKING" value="1" /> <option name="PROJECT_WORKING_DIRECTORY_TRACKING" value="0" /> <option name="PROJECT_KIND" value="DotNetCore" /> - <option name="PROJECT_TFM" value="net6.0" /> + <option name="PROJECT_TFM" value="net8.0" /> <method v="2"> <option name="Build" /> </method> </configuration> -</component> +</component> \ No newline at end of file diff --git a/build/.run/Artifacts MsBuildCore Test.run.xml b/build/.run/Artifacts MsBuildCore Test.run.xml index 1a96f6dce6..dfb1410c14 100644 --- a/build/.run/Artifacts MsBuildCore Test.run.xml +++ b/build/.run/Artifacts MsBuildCore Test.run.xml @@ -1,9 +1,12 @@ <component name="ProjectRunConfigurationManager"> <configuration default="false" name="Artifacts MsBuildCore Test" type="DotNetProject" factoryName=".NET Project" folderName="Artifacts"> <option name="EXE_PATH" value="$PROJECT_DIR$/../run/artifacts.exe" /> - <option name="PROGRAM_PARAMETERS" value="--target=ArtifactsMsBuildCoreTest --arch=amd64 --docker_dotnetversion=6.0 --docker_distro=alpine.3.12-x64" /> + <option name="PROGRAM_PARAMETERS" value="--target=ArtifactsMsBuildCoreTest --arch=amd64 --docker_dotnetversion=8.0 --docker_distro=alpine.3.17" /> <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$/.." /> <option name="PASS_PARENT_ENVS" value="1" /> + <envs> + <env name="DOTNET_ROLL_FORWARD" value="Major" /> + </envs> <option name="USE_EXTERNAL_CONSOLE" value="0" /> <option name="USE_MONO" value="0" /> <option name="RUNTIME_ARGUMENTS" value="" /> @@ -12,9 +15,9 @@ <option name="PROJECT_ARGUMENTS_TRACKING" value="1" /> <option name="PROJECT_WORKING_DIRECTORY_TRACKING" value="0" /> <option name="PROJECT_KIND" value="DotNetCore" /> - <option name="PROJECT_TFM" value="net6.0" /> + <option name="PROJECT_TFM" value="net8.0" /> <method v="2"> <option name="Build" /> </method> </configuration> -</component> +</component> \ No newline at end of file diff --git a/build/.run/Artifacts MsBuildFull Test.run.xml b/build/.run/Artifacts MsBuildFull Test.run.xml index 1720ff0093..31b7b025f3 100644 --- a/build/.run/Artifacts MsBuildFull Test.run.xml +++ b/build/.run/Artifacts MsBuildFull Test.run.xml @@ -4,6 +4,9 @@ <option name="PROGRAM_PARAMETERS" value="--target=ArtifactsMsBuildFullTest" /> <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$/.." /> <option name="PASS_PARENT_ENVS" value="1" /> + <envs> + <env name="DOTNET_ROLL_FORWARD" value="Major" /> + </envs> <option name="USE_EXTERNAL_CONSOLE" value="0" /> <option name="USE_MONO" value="0" /> <option name="RUNTIME_ARGUMENTS" value="" /> @@ -12,9 +15,9 @@ <option name="PROJECT_ARGUMENTS_TRACKING" value="1" /> <option name="PROJECT_WORKING_DIRECTORY_TRACKING" value="0" /> <option name="PROJECT_KIND" value="DotNetCore" /> - <option name="PROJECT_TFM" value="net6.0" /> + <option name="PROJECT_TFM" value="net8.0" /> <method v="2"> <option name="Build" /> </method> </configuration> -</component> +</component> \ No newline at end of file diff --git a/build/.run/Artifacts Native Test.run.xml b/build/.run/Artifacts Native Test.run.xml index 6f799f09dd..d1fedd3e0a 100644 --- a/build/.run/Artifacts Native Test.run.xml +++ b/build/.run/Artifacts Native Test.run.xml @@ -1,9 +1,12 @@ <component name="ProjectRunConfigurationManager"> <configuration default="false" name="Artifacts Native Test" type="DotNetProject" factoryName=".NET Project" folderName="Artifacts"> <option name="EXE_PATH" value="$PROJECT_DIR$/../run/artifacts.exe" /> - <option name="PROGRAM_PARAMETERS" value="--target=ArtifactsNativeTest --arch=amd64 --docker_dotnetversion=6.0 --docker_distro=alpine.3.12-x64" /> + <option name="PROGRAM_PARAMETERS" value="--target=ArtifactsNativeTest --arch=amd64 --docker_dotnetversion=8.0 --docker_distro=alpine.3.17" /> <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$/.." /> <option name="PASS_PARENT_ENVS" value="1" /> + <envs> + <env name="DOTNET_ROLL_FORWARD" value="Major" /> + </envs> <option name="USE_EXTERNAL_CONSOLE" value="0" /> <option name="USE_MONO" value="0" /> <option name="RUNTIME_ARGUMENTS" value="" /> @@ -12,9 +15,9 @@ <option name="PROJECT_ARGUMENTS_TRACKING" value="1" /> <option name="PROJECT_WORKING_DIRECTORY_TRACKING" value="0" /> <option name="PROJECT_KIND" value="DotNetCore" /> - <option name="PROJECT_TFM" value="net6.0" /> + <option name="PROJECT_TFM" value="net8.0" /> <method v="2"> <option name="Build" /> </method> </configuration> -</component> +</component> \ No newline at end of file diff --git a/build/.run/Artifacts Prepare.run.xml b/build/.run/Artifacts Prepare.run.xml index abfa44087a..d46b203748 100644 --- a/build/.run/Artifacts Prepare.run.xml +++ b/build/.run/Artifacts Prepare.run.xml @@ -1,9 +1,12 @@ <component name="ProjectRunConfigurationManager"> <configuration default="false" name="Artifacts Prepare" type="DotNetProject" factoryName=".NET Project" folderName="Artifacts"> <option name="EXE_PATH" value="$PROJECT_DIR$/../run/artifacts.exe" /> - <option name="PROGRAM_PARAMETERS" value="--target=ArtifactsPrepare --docker_dotnetversion=6.0 --docker_distro=alpine.3.12-x64" /> + <option name="PROGRAM_PARAMETERS" value="--target=ArtifactsPrepare --docker_dotnetversion=8.0 --docker_distro=alpine.3.17" /> <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$/.." /> <option name="PASS_PARENT_ENVS" value="1" /> + <envs> + <env name="DOTNET_ROLL_FORWARD" value="Major" /> + </envs> <option name="USE_EXTERNAL_CONSOLE" value="0" /> <option name="USE_MONO" value="0" /> <option name="RUNTIME_ARGUMENTS" value="" /> @@ -12,9 +15,9 @@ <option name="PROJECT_ARGUMENTS_TRACKING" value="1" /> <option name="PROJECT_WORKING_DIRECTORY_TRACKING" value="0" /> <option name="PROJECT_KIND" value="DotNetCore" /> - <option name="PROJECT_TFM" value="net6.0" /> + <option name="PROJECT_TFM" value="net8.0" /> <method v="2"> <option name="Build" /> </method> </configuration> -</component> +</component> \ No newline at end of file diff --git a/build/.run/Artifacts Test.run.xml b/build/.run/Artifacts Test.run.xml index 00cbcedda2..87de835ce9 100644 --- a/build/.run/Artifacts Test.run.xml +++ b/build/.run/Artifacts Test.run.xml @@ -1,9 +1,12 @@ <component name="ProjectRunConfigurationManager"> <configuration default="false" name="Artifacts Test" type="DotNetProject" factoryName=".NET Project" folderName="Artifacts"> <option name="EXE_PATH" value="$PROJECT_DIR$/../run/artifacts.exe" /> - <option name="PROGRAM_PARAMETERS" value="--target=ArtifactsTest --docker_dotnetversion=6.0 --docker_distro=alpine.3.12-x64" /> + <option name="PROGRAM_PARAMETERS" value="--target=ArtifactsTest --docker_dotnetversion=8.0 --docker_distro=alpine.3.17" /> <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$/.." /> <option name="PASS_PARENT_ENVS" value="1" /> + <envs> + <env name="DOTNET_ROLL_FORWARD" value="Major" /> + </envs> <option name="USE_EXTERNAL_CONSOLE" value="0" /> <option name="USE_MONO" value="0" /> <option name="RUNTIME_ARGUMENTS" value="" /> @@ -12,9 +15,9 @@ <option name="PROJECT_ARGUMENTS_TRACKING" value="1" /> <option name="PROJECT_WORKING_DIRECTORY_TRACKING" value="0" /> <option name="PROJECT_KIND" value="DotNetCore" /> - <option name="PROJECT_TFM" value="net6.0" /> + <option name="PROJECT_TFM" value="net8.0" /> <method v="2"> <option name="Build" /> </method> </configuration> -</component> +</component> \ No newline at end of file diff --git a/build/.run/Build Docs.run.xml b/build/.run/Build Docs.run.xml index eec6929a0e..2057ab88d0 100644 --- a/build/.run/Build Docs.run.xml +++ b/build/.run/Build Docs.run.xml @@ -4,6 +4,9 @@ <option name="PROGRAM_PARAMETERS" value="--target=BuildDocs" /> <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$/.." /> <option name="PASS_PARENT_ENVS" value="1" /> + <envs> + <env name="DOTNET_ROLL_FORWARD" value="Major" /> + </envs> <option name="USE_EXTERNAL_CONSOLE" value="0" /> <option name="USE_MONO" value="0" /> <option name="RUNTIME_ARGUMENTS" value="" /> @@ -12,9 +15,9 @@ <option name="PROJECT_ARGUMENTS_TRACKING" value="1" /> <option name="PROJECT_WORKING_DIRECTORY_TRACKING" value="0" /> <option name="PROJECT_KIND" value="DotNetCore" /> - <option name="PROJECT_TFM" value="net6.0" /> + <option name="PROJECT_TFM" value="net8.0" /> <method v="2"> <option name="Build" /> </method> </configuration> -</component> +</component> \ No newline at end of file diff --git a/build/.run/UnitTest (3.1).run.xml b/build/.run/Build Prepare.run.xml similarity index 71% rename from build/.run/UnitTest (3.1).run.xml rename to build/.run/Build Prepare.run.xml index c9d30bd0c4..2d64a908d0 100644 --- a/build/.run/UnitTest (3.1).run.xml +++ b/build/.run/Build Prepare.run.xml @@ -1,9 +1,12 @@ <component name="ProjectRunConfigurationManager"> - <configuration default="false" name="UnitTest (3.1)" type="DotNetProject" factoryName=".NET Project" folderName="Unit Test"> + <configuration default="false" name="Build Prepare" type="DotNetProject" factoryName=".NET Project"> <option name="EXE_PATH" value="$PROJECT_DIR$/../run/build.exe" /> - <option name="PROGRAM_PARAMETERS" value="--target=UnitTest --dotnet_target=netcoreapp3.1" /> + <option name="PROGRAM_PARAMETERS" value="--target=BuildPrepare" /> <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$/.." /> <option name="PASS_PARENT_ENVS" value="1" /> + <envs> + <env name="DOTNET_ROLL_FORWARD" value="Major" /> + </envs> <option name="USE_EXTERNAL_CONSOLE" value="0" /> <option name="USE_MONO" value="0" /> <option name="RUNTIME_ARGUMENTS" value="" /> @@ -12,9 +15,9 @@ <option name="PROJECT_ARGUMENTS_TRACKING" value="1" /> <option name="PROJECT_WORKING_DIRECTORY_TRACKING" value="0" /> <option name="PROJECT_KIND" value="DotNetCore" /> - <option name="PROJECT_TFM" value="net6.0" /> + <option name="PROJECT_TFM" value="net8.0" /> <method v="2"> <option name="Build" /> </method> </configuration> -</component> +</component> \ No newline at end of file diff --git a/build/.run/Build.run.xml b/build/.run/Build.run.xml index 7a45af8c8f..18bffb4512 100644 --- a/build/.run/Build.run.xml +++ b/build/.run/Build.run.xml @@ -4,6 +4,9 @@ <option name="PROGRAM_PARAMETERS" value="--target=Build" /> <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$/.." /> <option name="PASS_PARENT_ENVS" value="1" /> + <envs> + <env name="DOTNET_ROLL_FORWARD" value="Major" /> + </envs> <option name="USE_EXTERNAL_CONSOLE" value="0" /> <option name="USE_MONO" value="0" /> <option name="RUNTIME_ARGUMENTS" value="" /> @@ -12,9 +15,9 @@ <option name="PROJECT_ARGUMENTS_TRACKING" value="1" /> <option name="PROJECT_WORKING_DIRECTORY_TRACKING" value="0" /> <option name="PROJECT_KIND" value="DotNetCore" /> - <option name="PROJECT_TFM" value="net6.0" /> + <option name="PROJECT_TFM" value="net8.0" /> <method v="2"> <option name="Build" /> </method> </configuration> -</component> +</component> \ No newline at end of file diff --git a/build/.run/Clean.run.xml b/build/.run/Clean.run.xml index d1878a9df9..ae7016c4ef 100644 --- a/build/.run/Clean.run.xml +++ b/build/.run/Clean.run.xml @@ -4,6 +4,9 @@ <option name="PROGRAM_PARAMETERS" value="--target=Clean" /> <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$/.." /> <option name="PASS_PARENT_ENVS" value="1" /> + <envs> + <env name="DOTNET_ROLL_FORWARD" value="Major" /> + </envs> <option name="USE_EXTERNAL_CONSOLE" value="0" /> <option name="USE_MONO" value="0" /> <option name="RUNTIME_ARGUMENTS" value="" /> @@ -12,9 +15,9 @@ <option name="PROJECT_ARGUMENTS_TRACKING" value="1" /> <option name="PROJECT_WORKING_DIRECTORY_TRACKING" value="0" /> <option name="PROJECT_KIND" value="DotNetCore" /> - <option name="PROJECT_TFM" value="net6.0" /> + <option name="PROJECT_TFM" value="net8.0" /> <method v="2"> <option name="Build" /> </method> </configuration> -</component> +</component> \ No newline at end of file diff --git a/build/.run/Code Format.run.xml b/build/.run/Code Format.run.xml index 07647ad72e..ce22ecc7ef 100644 --- a/build/.run/Code Format.run.xml +++ b/build/.run/Code Format.run.xml @@ -4,6 +4,9 @@ <option name="PROGRAM_PARAMETERS" value="--target=CodeFormat --verbosity=diagnostic" /> <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$/.." /> <option name="PASS_PARENT_ENVS" value="1" /> + <envs> + <env name="DOTNET_ROLL_FORWARD" value="Major" /> + </envs> <option name="USE_EXTERNAL_CONSOLE" value="0" /> <option name="USE_MONO" value="0" /> <option name="RUNTIME_ARGUMENTS" value="" /> @@ -12,7 +15,7 @@ <option name="PROJECT_ARGUMENTS_TRACKING" value="1" /> <option name="PROJECT_WORKING_DIRECTORY_TRACKING" value="0" /> <option name="PROJECT_KIND" value="DotNetCore" /> - <option name="PROJECT_TFM" value="net6.0" /> + <option name="PROJECT_TFM" value="net8.0" /> <method v="2"> <option name="Build" /> </method> diff --git a/build/.run/Default Artifacts.run.xml b/build/.run/Default Artifacts.run.xml index 399102d9b7..b11ae50ad5 100644 --- a/build/.run/Default Artifacts.run.xml +++ b/build/.run/Default Artifacts.run.xml @@ -1,9 +1,12 @@ <component name="ProjectRunConfigurationManager"> <configuration default="false" name="Default Artifacts" type="DotNetProject" factoryName=".NET Project" folderName="Default"> - <option name="EXE_PATH" value="$PROJECT_DIR$/../run/artifacts-test.exe" /> + <option name="EXE_PATH" value="$PROJECT_DIR$/../run/artifacts.exe" /> <option name="PROGRAM_PARAMETERS" value="" /> <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$/.." /> <option name="PASS_PARENT_ENVS" value="1" /> + <envs> + <env name="DOTNET_ROLL_FORWARD" value="Major" /> + </envs> <option name="USE_EXTERNAL_CONSOLE" value="0" /> <option name="USE_MONO" value="0" /> <option name="RUNTIME_ARGUMENTS" value="" /> @@ -12,9 +15,9 @@ <option name="PROJECT_ARGUMENTS_TRACKING" value="1" /> <option name="PROJECT_WORKING_DIRECTORY_TRACKING" value="0" /> <option name="PROJECT_KIND" value="DotNetCore" /> - <option name="PROJECT_TFM" value="net6.0" /> + <option name="PROJECT_TFM" value="net8.0" /> <method v="2"> <option name="Build" /> </method> </configuration> -</component> +</component> \ No newline at end of file diff --git a/build/.run/Default Build.run.xml b/build/.run/Default Build.run.xml index 03bb44b7cd..40b932706d 100644 --- a/build/.run/Default Build.run.xml +++ b/build/.run/Default Build.run.xml @@ -4,6 +4,9 @@ <option name="PROGRAM_PARAMETERS" value="" /> <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$/.." /> <option name="PASS_PARENT_ENVS" value="1" /> + <envs> + <env name="DOTNET_ROLL_FORWARD" value="Major" /> + </envs> <option name="USE_EXTERNAL_CONSOLE" value="0" /> <option name="USE_MONO" value="0" /> <option name="RUNTIME_ARGUMENTS" value="" /> @@ -12,9 +15,9 @@ <option name="PROJECT_ARGUMENTS_TRACKING" value="1" /> <option name="PROJECT_WORKING_DIRECTORY_TRACKING" value="0" /> <option name="PROJECT_KIND" value="DotNetCore" /> - <option name="PROJECT_TFM" value="net6.0" /> + <option name="PROJECT_TFM" value="net8.0" /> <method v="2"> <option name="Build" /> </method> </configuration> -</component> +</component> \ No newline at end of file diff --git a/build/.run/Default Chores.run.xml b/build/.run/Default Chores.run.xml index f2ba56aa12..a4642c17d7 100644 --- a/build/.run/Default Chores.run.xml +++ b/build/.run/Default Chores.run.xml @@ -4,6 +4,9 @@ <option name="PROGRAM_PARAMETERS" value="" /> <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$/.." /> <option name="PASS_PARENT_ENVS" value="1" /> + <envs> + <env name="DOTNET_ROLL_FORWARD" value="Major" /> + </envs> <option name="USE_EXTERNAL_CONSOLE" value="0" /> <option name="USE_MONO" value="0" /> <option name="RUNTIME_ARGUMENTS" value="" /> @@ -12,9 +15,9 @@ <option name="PROJECT_ARGUMENTS_TRACKING" value="1" /> <option name="PROJECT_WORKING_DIRECTORY_TRACKING" value="0" /> <option name="PROJECT_KIND" value="DotNetCore" /> - <option name="PROJECT_TFM" value="net6.0" /> + <option name="PROJECT_TFM" value="net8.0" /> <method v="2"> <option name="Build" /> </method> </configuration> -</component> +</component> \ No newline at end of file diff --git a/build/.run/Default Docker.run.xml b/build/.run/Default Docker.run.xml index 7b8485d1fe..ec02b99b91 100644 --- a/build/.run/Default Docker.run.xml +++ b/build/.run/Default Docker.run.xml @@ -4,6 +4,9 @@ <option name="PROGRAM_PARAMETERS" value="" /> <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$/.." /> <option name="PASS_PARENT_ENVS" value="1" /> + <envs> + <env name="DOTNET_ROLL_FORWARD" value="Major" /> + </envs> <option name="USE_EXTERNAL_CONSOLE" value="0" /> <option name="USE_MONO" value="0" /> <option name="RUNTIME_ARGUMENTS" value="" /> @@ -12,9 +15,9 @@ <option name="PROJECT_ARGUMENTS_TRACKING" value="1" /> <option name="PROJECT_WORKING_DIRECTORY_TRACKING" value="0" /> <option name="PROJECT_KIND" value="DotNetCore" /> - <option name="PROJECT_TFM" value="net6.0" /> + <option name="PROJECT_TFM" value="net8.0" /> <method v="2"> <option name="Build" /> </method> </configuration> -</component> +</component> \ No newline at end of file diff --git a/build/.run/Default Docs.run.xml b/build/.run/Default Docs.run.xml index 0e9cf652a7..2741e3a8a7 100644 --- a/build/.run/Default Docs.run.xml +++ b/build/.run/Default Docs.run.xml @@ -4,6 +4,9 @@ <option name="PROGRAM_PARAMETERS" value="" /> <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$/.." /> <option name="PASS_PARENT_ENVS" value="1" /> + <envs> + <env name="DOTNET_ROLL_FORWARD" value="Major" /> + </envs> <option name="USE_EXTERNAL_CONSOLE" value="0" /> <option name="USE_MONO" value="0" /> <option name="RUNTIME_ARGUMENTS" value="" /> @@ -12,7 +15,7 @@ <option name="PROJECT_ARGUMENTS_TRACKING" value="1" /> <option name="PROJECT_WORKING_DIRECTORY_TRACKING" value="0" /> <option name="PROJECT_KIND" value="DotNetCore" /> - <option name="PROJECT_TFM" value="net6.0" /> + <option name="PROJECT_TFM" value="net8.0" /> <method v="2"> <option name="Build" /> </method> diff --git a/build/.run/Default Publish.run.xml b/build/.run/Default Publish.run.xml index c4edb33072..dfe8c455d3 100644 --- a/build/.run/Default Publish.run.xml +++ b/build/.run/Default Publish.run.xml @@ -4,6 +4,9 @@ <option name="PROGRAM_PARAMETERS" value="" /> <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$/.." /> <option name="PASS_PARENT_ENVS" value="1" /> + <envs> + <env name="DOTNET_ROLL_FORWARD" value="Major" /> + </envs> <option name="USE_EXTERNAL_CONSOLE" value="0" /> <option name="USE_MONO" value="0" /> <option name="RUNTIME_ARGUMENTS" value="" /> @@ -12,9 +15,9 @@ <option name="PROJECT_ARGUMENTS_TRACKING" value="1" /> <option name="PROJECT_WORKING_DIRECTORY_TRACKING" value="0" /> <option name="PROJECT_KIND" value="DotNetCore" /> - <option name="PROJECT_TFM" value="net6.0" /> + <option name="PROJECT_TFM" value="net8.0" /> <method v="2"> <option name="Build" /> </method> </configuration> -</component> +</component> \ No newline at end of file diff --git a/build/.run/Docker Build.run.xml b/build/.run/Docker Build.run.xml index 198f574003..8acf672be7 100644 --- a/build/.run/Docker Build.run.xml +++ b/build/.run/Docker Build.run.xml @@ -1,9 +1,12 @@ <component name="ProjectRunConfigurationManager"> <configuration default="false" name="Docker Build" type="DotNetProject" factoryName=".NET Project" folderName="Docker"> <option name="EXE_PATH" value="$PROJECT_DIR$/../run/docker.exe" /> - <option name="PROGRAM_PARAMETERS" value="--target=DockerBuild --arch amd64 --docker_dotnetversion=6.0 --docker_distro=debian.11" /> + <option name="PROGRAM_PARAMETERS" value="--target=DockerBuild --arch=amd64 --arch=arm64 --docker_dotnetversion=8.0 --docker_distro=debian.11 --verbosity=diagnostic" /> <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$/.." /> <option name="PASS_PARENT_ENVS" value="1" /> + <envs> + <env name="DOTNET_ROLL_FORWARD" value="Major" /> + </envs> <option name="USE_EXTERNAL_CONSOLE" value="0" /> <option name="USE_MONO" value="0" /> <option name="RUNTIME_ARGUMENTS" value="" /> @@ -12,9 +15,9 @@ <option name="PROJECT_ARGUMENTS_TRACKING" value="1" /> <option name="PROJECT_WORKING_DIRECTORY_TRACKING" value="0" /> <option name="PROJECT_KIND" value="DotNetCore" /> - <option name="PROJECT_TFM" value="net6.0" /> + <option name="PROJECT_TFM" value="net8.0" /> <method v="2"> <option name="Build" /> </method> </configuration> -</component> +</component> \ No newline at end of file diff --git a/build/.run/Docker Manifest.run.xml b/build/.run/Docker Manifest.run.xml index eb994a062c..4b7f858ab1 100644 --- a/build/.run/Docker Manifest.run.xml +++ b/build/.run/Docker Manifest.run.xml @@ -1,9 +1,12 @@ <component name="ProjectRunConfigurationManager"> <configuration default="false" name="Docker Manifest" type="DotNetProject" factoryName=".NET Project" folderName="Docker"> <option name="EXE_PATH" value="$PROJECT_DIR$/../run/docker.exe" /> - <option name="PROGRAM_PARAMETERS" value="--target=DockerManifest --docker_dotnetversion=6.0 --docker_distro=debian.11" /> + <option name="PROGRAM_PARAMETERS" value="--target=DockerManifest --arch=amd64 --arch=arm64 --docker_dotnetversion=8.0 --docker_distro=debian.11" /> <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$/.." /> <option name="PASS_PARENT_ENVS" value="1" /> + <envs> + <env name="DOTNET_ROLL_FORWARD" value="Major" /> + </envs> <option name="USE_EXTERNAL_CONSOLE" value="0" /> <option name="USE_MONO" value="0" /> <option name="RUNTIME_ARGUMENTS" value="" /> @@ -12,9 +15,9 @@ <option name="PROJECT_ARGUMENTS_TRACKING" value="1" /> <option name="PROJECT_WORKING_DIRECTORY_TRACKING" value="0" /> <option name="PROJECT_KIND" value="DotNetCore" /> - <option name="PROJECT_TFM" value="net6.0" /> + <option name="PROJECT_TFM" value="net8.0" /> <method v="2"> <option name="Build" /> </method> </configuration> -</component> +</component> \ No newline at end of file diff --git a/build/.run/Docker Publish.run.xml b/build/.run/Docker Publish.run.xml index dbdebe935f..e19814657b 100644 --- a/build/.run/Docker Publish.run.xml +++ b/build/.run/Docker Publish.run.xml @@ -1,9 +1,12 @@ <component name="ProjectRunConfigurationManager"> <configuration default="false" name="Docker Publish" type="DotNetProject" factoryName=".NET Project" folderName="Docker"> <option name="EXE_PATH" value="$PROJECT_DIR$/../run/docker.exe" /> - <option name="PROGRAM_PARAMETERS" value="--target=DockerPublish --arch amd64 --docker_dotnetversion=6.0 --docker_distro=debian.11" /> + <option name="PROGRAM_PARAMETERS" value="--target=DockerPublish --arch=amd64 --arch=arm64 --docker_dotnetversion=8.0 --docker_distro=debian.11 --verbosity=diagnostic" /> <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$/.." /> <option name="PASS_PARENT_ENVS" value="1" /> + <envs> + <env name="DOTNET_ROLL_FORWARD" value="Major" /> + </envs> <option name="USE_EXTERNAL_CONSOLE" value="0" /> <option name="USE_MONO" value="0" /> <option name="RUNTIME_ARGUMENTS" value="" /> @@ -12,9 +15,9 @@ <option name="PROJECT_ARGUMENTS_TRACKING" value="1" /> <option name="PROJECT_WORKING_DIRECTORY_TRACKING" value="0" /> <option name="PROJECT_KIND" value="DotNetCore" /> - <option name="PROJECT_TFM" value="net6.0" /> + <option name="PROJECT_TFM" value="net8.0" /> <method v="2"> <option name="Build" /> </method> </configuration> -</component> +</component> \ No newline at end of file diff --git a/build/.run/Docker Test.run.xml b/build/.run/Docker Test.run.xml index 09f0c21d44..f67cc1ee1b 100644 --- a/build/.run/Docker Test.run.xml +++ b/build/.run/Docker Test.run.xml @@ -1,9 +1,12 @@ <component name="ProjectRunConfigurationManager"> <configuration default="false" name="Docker Test" type="DotNetProject" factoryName=".NET Project" folderName="Docker"> <option name="EXE_PATH" value="$PROJECT_DIR$/../run/docker.exe" /> - <option name="PROGRAM_PARAMETERS" value="--target=DockerTest --arch amd64 --docker_dotnetversion=6.0 --docker_distro=debian.11" /> + <option name="PROGRAM_PARAMETERS" value="--target=DockerTest --arch=amd64 --docker_dotnetversion=8.0 --docker_distro=debian.11" /> <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$/.." /> <option name="PASS_PARENT_ENVS" value="1" /> + <envs> + <env name="DOTNET_ROLL_FORWARD" value="Major" /> + </envs> <option name="USE_EXTERNAL_CONSOLE" value="0" /> <option name="USE_MONO" value="0" /> <option name="RUNTIME_ARGUMENTS" value="" /> @@ -12,9 +15,9 @@ <option name="PROJECT_ARGUMENTS_TRACKING" value="1" /> <option name="PROJECT_WORKING_DIRECTORY_TRACKING" value="0" /> <option name="PROJECT_KIND" value="DotNetCore" /> - <option name="PROJECT_TFM" value="net6.0" /> + <option name="PROJECT_TFM" value="net8.0" /> <method v="2"> <option name="Build" /> </method> </configuration> -</component> +</component> \ No newline at end of file diff --git a/build/.run/DockerHub Readme Publish.run.xml b/build/.run/DockerHub Readme Publish.run.xml new file mode 100644 index 0000000000..abccf7c47f --- /dev/null +++ b/build/.run/DockerHub Readme Publish.run.xml @@ -0,0 +1,25 @@ +<component name="ProjectRunConfigurationManager"> + <configuration default="false" name="DockerHub Readme Publish" type="DotNetProject" factoryName=".NET Project" folderName="Docker"> + <option name="EXE_PATH" value="$PROJECT_DIR$/../run/docker.exe" /> + <option name="PROGRAM_PARAMETERS" value="--target=DockerHubReadmePublish" /> + <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$/.." /> + <option name="PASS_PARENT_ENVS" value="1" /> + <envs> + <env name="DOCKER_PASSWORD" value="" /> + <env name="DOCKER_USERNAME" value="" /> + <env name="DOTNET_ROLL_FORWARD" value="Major" /> + </envs> + <option name="USE_EXTERNAL_CONSOLE" value="0" /> + <option name="USE_MONO" value="0" /> + <option name="RUNTIME_ARGUMENTS" value="" /> + <option name="PROJECT_PATH" value="$PROJECT_DIR$/docker/docker.csproj" /> + <option name="PROJECT_EXE_PATH_TRACKING" value="1" /> + <option name="PROJECT_ARGUMENTS_TRACKING" value="1" /> + <option name="PROJECT_WORKING_DIRECTORY_TRACKING" value="0" /> + <option name="PROJECT_KIND" value="DotNetCore" /> + <option name="PROJECT_TFM" value="net8.0" /> + <method v="2"> + <option name="Build" /> + </method> + </configuration> +</component> \ No newline at end of file diff --git a/build/.run/Tools Update.run.xml b/build/.run/Generate Schemas.run.xml similarity index 56% rename from build/.run/Tools Update.run.xml rename to build/.run/Generate Schemas.run.xml index 79b1aaa0be..e8b7a008a7 100644 --- a/build/.run/Tools Update.run.xml +++ b/build/.run/Generate Schemas.run.xml @@ -1,20 +1,23 @@ <component name="ProjectRunConfigurationManager"> - <configuration default="false" name="Tools Update" type="DotNetProject" factoryName=".NET Project"> - <option name="EXE_PATH" value="$PROJECT_DIR$/../run/chores.exe" /> - <option name="PROGRAM_PARAMETERS" value="--target=ToolsUpdate" /> + <configuration default="false" name="Generate Schemas" type="DotNetProject" factoryName=".NET Project" folderName="Docs"> + <option name="EXE_PATH" value="$PROJECT_DIR$/../run/docs.exe" /> + <option name="PROGRAM_PARAMETERS" value="--target=GenerateSchemas" /> <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$/.." /> <option name="PASS_PARENT_ENVS" value="1" /> + <envs> + <env name="DOTNET_ROLL_FORWARD" value="Major" /> + </envs> <option name="USE_EXTERNAL_CONSOLE" value="0" /> <option name="USE_MONO" value="0" /> <option name="RUNTIME_ARGUMENTS" value="" /> - <option name="PROJECT_PATH" value="$PROJECT_DIR$/chores/chores.csproj" /> + <option name="PROJECT_PATH" value="$PROJECT_DIR$/docs/docs.csproj" /> <option name="PROJECT_EXE_PATH_TRACKING" value="1" /> <option name="PROJECT_ARGUMENTS_TRACKING" value="1" /> <option name="PROJECT_WORKING_DIRECTORY_TRACKING" value="0" /> <option name="PROJECT_KIND" value="DotNetCore" /> - <option name="PROJECT_TFM" value="net6.0" /> + <option name="PROJECT_TFM" value="net8.0" /> <method v="2"> <option name="Build" /> </method> </configuration> -</component> +</component> \ No newline at end of file diff --git a/build/.run/Package Archive.run.xml b/build/.run/Package Archive.run.xml index 2133c7a4d1..7f6fdf601f 100644 --- a/build/.run/Package Archive.run.xml +++ b/build/.run/Package Archive.run.xml @@ -4,6 +4,9 @@ <option name="PROGRAM_PARAMETERS" value="--target=PackageArchive" /> <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$/.." /> <option name="PASS_PARENT_ENVS" value="1" /> + <envs> + <env name="DOTNET_ROLL_FORWARD" value="Major" /> + </envs> <option name="USE_EXTERNAL_CONSOLE" value="0" /> <option name="USE_MONO" value="0" /> <option name="RUNTIME_ARGUMENTS" value="" /> @@ -12,7 +15,7 @@ <option name="PROJECT_ARGUMENTS_TRACKING" value="1" /> <option name="PROJECT_WORKING_DIRECTORY_TRACKING" value="0" /> <option name="PROJECT_KIND" value="DotNetCore" /> - <option name="PROJECT_TFM" value="net6.0" /> + <option name="PROJECT_TFM" value="net8.0" /> <method v="2"> <option name="Build" /> </method> diff --git a/build/.run/Package Chocolatey.run.xml b/build/.run/Package Chocolatey.run.xml index c51905b1cb..f623b0b793 100644 --- a/build/.run/Package Chocolatey.run.xml +++ b/build/.run/Package Chocolatey.run.xml @@ -4,6 +4,9 @@ <option name="PROGRAM_PARAMETERS" value="--target=PackageChocolatey" /> <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$/.." /> <option name="PASS_PARENT_ENVS" value="1" /> + <envs> + <env name="DOTNET_ROLL_FORWARD" value="Major" /> + </envs> <option name="USE_EXTERNAL_CONSOLE" value="0" /> <option name="USE_MONO" value="0" /> <option name="RUNTIME_ARGUMENTS" value="" /> @@ -12,9 +15,9 @@ <option name="PROJECT_ARGUMENTS_TRACKING" value="1" /> <option name="PROJECT_WORKING_DIRECTORY_TRACKING" value="0" /> <option name="PROJECT_KIND" value="DotNetCore" /> - <option name="PROJECT_TFM" value="net6.0" /> + <option name="PROJECT_TFM" value="net8.0" /> <method v="2"> <option name="Build" /> </method> </configuration> -</component> +</component> \ No newline at end of file diff --git a/build/.run/Package Nuget.run.xml b/build/.run/Package Nuget.run.xml index efdbd8bef8..f7d26d597c 100644 --- a/build/.run/Package Nuget.run.xml +++ b/build/.run/Package Nuget.run.xml @@ -4,6 +4,9 @@ <option name="PROGRAM_PARAMETERS" value="--target=PackageNuget" /> <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$/.." /> <option name="PASS_PARENT_ENVS" value="1" /> + <envs> + <env name="DOTNET_ROLL_FORWARD" value="Major" /> + </envs> <option name="USE_EXTERNAL_CONSOLE" value="0" /> <option name="USE_MONO" value="0" /> <option name="RUNTIME_ARGUMENTS" value="" /> @@ -12,9 +15,9 @@ <option name="PROJECT_ARGUMENTS_TRACKING" value="1" /> <option name="PROJECT_WORKING_DIRECTORY_TRACKING" value="0" /> <option name="PROJECT_KIND" value="DotNetCore" /> - <option name="PROJECT_TFM" value="net6.0" /> + <option name="PROJECT_TFM" value="net8.0" /> <method v="2"> <option name="Build" /> </method> </configuration> -</component> +</component> \ No newline at end of file diff --git a/build/.run/PackagePrepare.run.xml b/build/.run/Package Prepare.run.xml similarity index 82% rename from build/.run/PackagePrepare.run.xml rename to build/.run/Package Prepare.run.xml index 225f94e90d..a4f1c9a96e 100644 --- a/build/.run/PackagePrepare.run.xml +++ b/build/.run/Package Prepare.run.xml @@ -1,9 +1,12 @@ -<component name="ProjectRunConfigurationManager"> +<component name="ProjectRunConfigurationManager"> <configuration default="false" name="Package Prepare" type="DotNetProject" factoryName=".NET Project" folderName="Package"> <option name="EXE_PATH" value="$PROJECT_DIR$/../run/build.exe" /> <option name="PROGRAM_PARAMETERS" value="--target=PackagePrepare" /> <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$/.." /> <option name="PASS_PARENT_ENVS" value="1" /> + <envs> + <env name="DOTNET_ROLL_FORWARD" value="Major" /> + </envs> <option name="USE_EXTERNAL_CONSOLE" value="0" /> <option name="USE_MONO" value="0" /> <option name="RUNTIME_ARGUMENTS" value="" /> @@ -12,9 +15,9 @@ <option name="PROJECT_ARGUMENTS_TRACKING" value="1" /> <option name="PROJECT_WORKING_DIRECTORY_TRACKING" value="0" /> <option name="PROJECT_KIND" value="DotNetCore" /> - <option name="PROJECT_TFM" value="net6.0" /> + <option name="PROJECT_TFM" value="net8.0" /> <method v="2"> <option name="Build" /> </method> </configuration> -</component> +</component> \ No newline at end of file diff --git a/build/.run/Package.run.xml b/build/.run/Package.run.xml index 0cc953e5ca..1bc955563d 100644 --- a/build/.run/Package.run.xml +++ b/build/.run/Package.run.xml @@ -4,6 +4,9 @@ <option name="PROGRAM_PARAMETERS" value="--target=Package" /> <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$/.." /> <option name="PASS_PARENT_ENVS" value="1" /> + <envs> + <env name="DOTNET_ROLL_FORWARD" value="Major" /> + </envs> <option name="USE_EXTERNAL_CONSOLE" value="0" /> <option name="USE_MONO" value="0" /> <option name="RUNTIME_ARGUMENTS" value="" /> @@ -12,9 +15,9 @@ <option name="PROJECT_ARGUMENTS_TRACKING" value="1" /> <option name="PROJECT_WORKING_DIRECTORY_TRACKING" value="0" /> <option name="PROJECT_KIND" value="DotNetCore" /> - <option name="PROJECT_TFM" value="net6.0" /> + <option name="PROJECT_TFM" value="net8.0" /> <method v="2"> <option name="Build" /> </method> </configuration> -</component> +</component> \ No newline at end of file diff --git a/build/.run/Preview Docs.run.xml b/build/.run/Preview Docs.run.xml index 9068da7671..22fe19e0d6 100644 --- a/build/.run/Preview Docs.run.xml +++ b/build/.run/Preview Docs.run.xml @@ -4,6 +4,9 @@ <option name="PROGRAM_PARAMETERS" value="--target=PreviewDocs" /> <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$/.." /> <option name="PASS_PARENT_ENVS" value="1" /> + <envs> + <env name="DOTNET_ROLL_FORWARD" value="Major" /> + </envs> <option name="USE_EXTERNAL_CONSOLE" value="0" /> <option name="USE_MONO" value="0" /> <option name="RUNTIME_ARGUMENTS" value="" /> @@ -12,9 +15,9 @@ <option name="PROJECT_ARGUMENTS_TRACKING" value="1" /> <option name="PROJECT_WORKING_DIRECTORY_TRACKING" value="0" /> <option name="PROJECT_KIND" value="DotNetCore" /> - <option name="PROJECT_TFM" value="net6.0" /> + <option name="PROJECT_TFM" value="net8.0" /> <method v="2"> <option name="Build" /> </method> </configuration> -</component> +</component> \ No newline at end of file diff --git a/build/.run/Publish Chocolatey.run.xml b/build/.run/Publish Chocolatey.run.xml index 641d36acea..7b74022d81 100644 --- a/build/.run/Publish Chocolatey.run.xml +++ b/build/.run/Publish Chocolatey.run.xml @@ -6,6 +6,7 @@ <option name="PASS_PARENT_ENVS" value="1" /> <envs> <env name="NUGET_API_KEY" value="" /> + <env name="DOTNET_ROLL_FORWARD" value="Major" /> </envs> <option name="USE_EXTERNAL_CONSOLE" value="0" /> <option name="USE_MONO" value="0" /> @@ -15,9 +16,9 @@ <option name="PROJECT_ARGUMENTS_TRACKING" value="1" /> <option name="PROJECT_WORKING_DIRECTORY_TRACKING" value="0" /> <option name="PROJECT_KIND" value="DotNetCore" /> - <option name="PROJECT_TFM" value="net6.0" /> + <option name="PROJECT_TFM" value="net8.0" /> <method v="2"> <option name="Build" /> </method> </configuration> -</component> +</component> \ No newline at end of file diff --git a/build/.run/Publish Docs.run.xml b/build/.run/Publish Docs.run.xml index 7df9af5017..a7291c7f94 100644 --- a/build/.run/Publish Docs.run.xml +++ b/build/.run/Publish Docs.run.xml @@ -4,6 +4,9 @@ <option name="PROGRAM_PARAMETERS" value="--target=PublishDocs --force" /> <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$/.." /> <option name="PASS_PARENT_ENVS" value="1" /> + <envs> + <env name="DOTNET_ROLL_FORWARD" value="Major" /> + </envs> <option name="USE_EXTERNAL_CONSOLE" value="0" /> <option name="USE_MONO" value="0" /> <option name="RUNTIME_ARGUMENTS" value="" /> @@ -12,9 +15,9 @@ <option name="PROJECT_ARGUMENTS_TRACKING" value="1" /> <option name="PROJECT_WORKING_DIRECTORY_TRACKING" value="0" /> <option name="PROJECT_KIND" value="DotNetCore" /> - <option name="PROJECT_TFM" value="net6.0" /> + <option name="PROJECT_TFM" value="net8.0" /> <method v="2"> <option name="Build" /> </method> </configuration> -</component> +</component> \ No newline at end of file diff --git a/build/.run/Publish Nuget.run.xml b/build/.run/Publish Nuget.run.xml index 2b4af69eb4..8c0d06dc9b 100644 --- a/build/.run/Publish Nuget.run.xml +++ b/build/.run/Publish Nuget.run.xml @@ -5,6 +5,7 @@ <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$/.." /> <option name="PASS_PARENT_ENVS" value="1" /> <envs> + <env name="DOTNET_ROLL_FORWARD" value="Major" /> <env name="NUGET_API_KEY" value="" /> </envs> <option name="USE_EXTERNAL_CONSOLE" value="0" /> @@ -15,9 +16,9 @@ <option name="PROJECT_ARGUMENTS_TRACKING" value="1" /> <option name="PROJECT_WORKING_DIRECTORY_TRACKING" value="0" /> <option name="PROJECT_KIND" value="DotNetCore" /> - <option name="PROJECT_TFM" value="net6.0" /> + <option name="PROJECT_TFM" value="net8.0" /> <method v="2"> <option name="Build" /> </method> </configuration> -</component> +</component> \ No newline at end of file diff --git a/build/.run/Publish Release.run.xml b/build/.run/Publish Release.run.xml index ff99047ca0..fcf6261525 100644 --- a/build/.run/Publish Release.run.xml +++ b/build/.run/Publish Release.run.xml @@ -4,6 +4,9 @@ <option name="PROGRAM_PARAMETERS" value="--target=PublishRelease" /> <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$/.." /> <option name="PASS_PARENT_ENVS" value="1" /> + <envs> + <env name="DOTNET_ROLL_FORWARD" value="Major" /> + </envs> <option name="USE_EXTERNAL_CONSOLE" value="0" /> <option name="USE_MONO" value="0" /> <option name="RUNTIME_ARGUMENTS" value="" /> @@ -12,9 +15,9 @@ <option name="PROJECT_ARGUMENTS_TRACKING" value="1" /> <option name="PROJECT_WORKING_DIRECTORY_TRACKING" value="0" /> <option name="PROJECT_KIND" value="DotNetCore" /> - <option name="PROJECT_TFM" value="net6.0" /> + <option name="PROJECT_TFM" value="net8.0" /> <method v="2"> <option name="Build" /> </method> </configuration> -</component> +</component> \ No newline at end of file diff --git a/build/.run/PublishCoverage.run.xml b/build/.run/PublishCoverage.run.xml new file mode 100644 index 0000000000..7a91587fb3 --- /dev/null +++ b/build/.run/PublishCoverage.run.xml @@ -0,0 +1,24 @@ +<component name="ProjectRunConfigurationManager"> + <configuration default="false" name="PublishCoverage" type="DotNetProject" factoryName=".NET Project" folderName="Unit Test"> + <option name="EXE_PATH" value="$PROJECT_DIR$/../run/build.exe" /> + <option name="PROGRAM_PARAMETERS" value="--target=PublishCoverage --dotnet_target=8.0" /> + <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$/.." /> + <option name="PASS_PARENT_ENVS" value="1" /> + <envs> + <env name="CODECOV_TOKEN" value="<token>" /> + <env name="DOTNET_ROLL_FORWARD" value="Major" /> + </envs> + <option name="USE_EXTERNAL_CONSOLE" value="0" /> + <option name="USE_MONO" value="0" /> + <option name="RUNTIME_ARGUMENTS" value="" /> + <option name="PROJECT_PATH" value="$PROJECT_DIR$/build/build.csproj" /> + <option name="PROJECT_EXE_PATH_TRACKING" value="1" /> + <option name="PROJECT_ARGUMENTS_TRACKING" value="1" /> + <option name="PROJECT_WORKING_DIRECTORY_TRACKING" value="0" /> + <option name="PROJECT_KIND" value="DotNetCore" /> + <option name="PROJECT_TFM" value="net8.0" /> + <method v="2"> + <option name="Build" /> + </method> + </configuration> +</component> \ No newline at end of file diff --git a/build/.run/Test.run.xml b/build/.run/Test.run.xml index d5e9c3b1eb..44f174179f 100644 --- a/build/.run/Test.run.xml +++ b/build/.run/Test.run.xml @@ -4,6 +4,9 @@ <option name="PROGRAM_PARAMETERS" value="" /> <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$/.." /> <option name="PASS_PARENT_ENVS" value="1" /> + <envs> + <env name="DOTNET_ROLL_FORWARD" value="Major" /> + </envs> <option name="USE_EXTERNAL_CONSOLE" value="0" /> <option name="USE_MONO" value="0" /> <option name="RUNTIME_ARGUMENTS" value="" /> @@ -12,9 +15,9 @@ <option name="PROJECT_ARGUMENTS_TRACKING" value="1" /> <option name="PROJECT_WORKING_DIRECTORY_TRACKING" value="0" /> <option name="PROJECT_KIND" value="DotNetCore" /> - <option name="PROJECT_TFM" value="net6.0" /> + <option name="PROJECT_TFM" value="net8.0" /> <method v="2"> <option name="Build" /> </method> </configuration> -</component> +</component> \ No newline at end of file diff --git a/build/.run/UnitTest (5.0).run.xml b/build/.run/UnitTest (6.0).run.xml similarity index 75% rename from build/.run/UnitTest (5.0).run.xml rename to build/.run/UnitTest (6.0).run.xml index 4b83f40ccd..160f4737c6 100644 --- a/build/.run/UnitTest (5.0).run.xml +++ b/build/.run/UnitTest (6.0).run.xml @@ -1,9 +1,12 @@ -<component name="ProjectRunConfigurationManager"> +<component name="ProjectRunConfigurationManager"> <configuration default="false" name="UnitTest (6.0)" type="DotNetProject" factoryName=".NET Project" folderName="Unit Test"> - <option name="EXE_PATH" value="$PROJECT_DIR$/../run/build.exe" /> - <option name="PROGRAM_PARAMETERS" value="--target=UnitTest --dotnet_target=net6.0" /> + <option name="EXE_PATH" value="$PROJECT_DIR$/../run/build" /> + <option name="PROGRAM_PARAMETERS" value="--target=UnitTest --dotnet_target=6.0" /> <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$/.." /> <option name="PASS_PARENT_ENVS" value="1" /> + <envs> + <env name="DOTNET_ROLL_FORWARD" value="Major" /> + </envs> <option name="USE_EXTERNAL_CONSOLE" value="0" /> <option name="USE_MONO" value="0" /> <option name="RUNTIME_ARGUMENTS" value="" /> @@ -12,9 +15,9 @@ <option name="PROJECT_ARGUMENTS_TRACKING" value="1" /> <option name="PROJECT_WORKING_DIRECTORY_TRACKING" value="0" /> <option name="PROJECT_KIND" value="DotNetCore" /> - <option name="PROJECT_TFM" value="net6.0" /> + <option name="PROJECT_TFM" value="net8.0" /> <method v="2"> <option name="Build" /> </method> </configuration> -</component> +</component> \ No newline at end of file diff --git a/build/.run/UnitTest (4.8).run.xml b/build/.run/UnitTest (8.0).run.xml similarity index 79% rename from build/.run/UnitTest (4.8).run.xml rename to build/.run/UnitTest (8.0).run.xml index bc1829bc99..542a0d60c9 100644 --- a/build/.run/UnitTest (4.8).run.xml +++ b/build/.run/UnitTest (8.0).run.xml @@ -1,7 +1,7 @@ <component name="ProjectRunConfigurationManager"> - <configuration default="false" name="UnitTest (4.8)" type="DotNetProject" factoryName=".NET Project" folderName="Unit Test"> - <option name="EXE_PATH" value="$PROJECT_DIR$/../run/build.exe" /> - <option name="PROGRAM_PARAMETERS" value="--target=UnitTest --dotnet_target=net48" /> + <configuration default="false" name="UnitTest (8.0)" type="DotNetProject" factoryName=".NET Project" folderName="Unit Test"> + <option name="EXE_PATH" value="$PROJECT_DIR$/../run/build" /> + <option name="PROGRAM_PARAMETERS" value="--target=UnitTest --dotnet_target=8.0" /> <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$/.." /> <option name="PASS_PARENT_ENVS" value="1" /> <option name="USE_EXTERNAL_CONSOLE" value="0" /> @@ -12,9 +12,9 @@ <option name="PROJECT_ARGUMENTS_TRACKING" value="1" /> <option name="PROJECT_WORKING_DIRECTORY_TRACKING" value="0" /> <option name="PROJECT_KIND" value="DotNetCore" /> - <option name="PROJECT_TFM" value="net6.0" /> + <option name="PROJECT_TFM" value="net8.0" /> <method v="2"> <option name="Build" /> </method> </configuration> -</component> +</component> \ No newline at end of file diff --git a/build/.run/ValidateVersion.run.xml b/build/.run/Validate Version.run.xml similarity index 81% rename from build/.run/ValidateVersion.run.xml rename to build/.run/Validate Version.run.xml index 3f0dfe14e3..b16e1c4915 100644 --- a/build/.run/ValidateVersion.run.xml +++ b/build/.run/Validate Version.run.xml @@ -1,9 +1,12 @@ -<component name="ProjectRunConfigurationManager"> +<component name="ProjectRunConfigurationManager"> <configuration default="false" name="Validate Version" type="DotNetProject" factoryName=".NET Project"> <option name="EXE_PATH" value="$PROJECT_DIR$/../run/build.exe" /> - <option name="PROGRAM_PARAMETERS" value="--target=ValidateVersion" /> + <option name="PROGRAM_PARAMETERS" value="--target=ValidateVersion " /> <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$/.." /> <option name="PASS_PARENT_ENVS" value="1" /> + <envs> + <env name="DOTNET_ROLL_FORWARD" value="Major" /> + </envs> <option name="USE_EXTERNAL_CONSOLE" value="0" /> <option name="USE_MONO" value="0" /> <option name="RUNTIME_ARGUMENTS" value="" /> @@ -12,9 +15,9 @@ <option name="PROJECT_ARGUMENTS_TRACKING" value="1" /> <option name="PROJECT_WORKING_DIRECTORY_TRACKING" value="0" /> <option name="PROJECT_KIND" value="DotNetCore" /> - <option name="PROJECT_TFM" value="net6.0" /> + <option name="PROJECT_TFM" value="net8.0" /> <method v="2"> <option name="Build" /> </method> </configuration> -</component> +</component> \ No newline at end of file diff --git a/build/CI.sln b/build/CI.sln index 7489a61f65..4a5f522977 100644 --- a/build/CI.sln +++ b/build/CI.sln @@ -3,7 +3,9 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "sln", "sln", "{EC2C1EC4-BE5 ProjectSection(SolutionItems) = preProject Directory.Build.props = Directory.Build.props Directory.Packages.props = Directory.Packages.props - ..\dotnet-tools.json = ..\dotnet-tools.json + ..\global.json = ..\global.json + ..\.gitignore = ..\.gitignore + ..\.config\dotnet-tools.json = ..\.config\dotnet-tools.json EndProjectSection EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "build", "build\build.csproj", "{1AC00FB2-E28A-46B7-9683-AA7A1AFC29EB}" @@ -22,6 +24,43 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "docs", "docs\docs.csproj", EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "release", "release\release.csproj", "{8DAB65D8-57E8-4185-96FC-8A7C7373FC23}" EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "workflows", "workflows", "{8E5B758F-925A-49E4-9011-20AD2A9E1F43}" + ProjectSection(SolutionItems) = preProject + ..\.github\workflows\ci.yml = ..\.github\workflows\ci.yml + ..\.github\workflows\codeql-analysis.yml = ..\.github\workflows\codeql-analysis.yml + ..\.github\workflows\docs.yml = ..\.github\workflows\docs.yml + ..\.github\workflows\format.yml = ..\.github\workflows\format.yml + ..\.github\workflows\homebrew.yml = ..\.github\workflows\homebrew.yml + ..\.github\workflows\release.yml = ..\.github\workflows\release.yml + ..\.github\workflows\_artifacts_linux.yml = ..\.github\workflows\_artifacts_linux.yml + ..\.github\workflows\_artifacts_windows.yml = ..\.github\workflows\_artifacts_windows.yml + ..\.github\workflows\_build.yml = ..\.github\workflows\_build.yml + ..\.github\workflows\_docker.yml = ..\.github\workflows\_docker.yml + ..\.github\workflows\_docker_manifests.yml = ..\.github\workflows\_docker_manifests.yml + ..\.github\workflows\_prepare.yml = ..\.github\workflows\_prepare.yml + ..\.github\workflows\_publish.yml = ..\.github\workflows\_publish.yml + ..\.github\workflows\_unit_tests.yml = ..\.github\workflows\_unit_tests.yml + ..\.github\workflows\stale.yml = ..\.github\workflows\stale.yml + ..\.github\workflows\winget.yml = ..\.github\workflows\winget.yml + ..\.github\workflows\mkdocs.yml = ..\.github\workflows\mkdocs.yml + ..\.github\dependabot.yml = ..\.github\dependabot.yml + EndProjectSection +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "actions", "actions", "{A9B92261-AB9C-47D6-A8A7-616A5A62B063}" + ProjectSection(SolutionItems) = preProject + ..\.github\actions\artifacts-restore\action.yml = ..\.github\actions\artifacts-restore\action.yml + ..\.github\actions\docker-manifests\action.yml = ..\.github\actions\docker-manifests\action.yml + ..\.github\actions\docker-publish\action.yml = ..\.github\actions\docker-publish\action.yml + ..\.github\actions\docker-test\action.yml = ..\.github\actions\docker-test\action.yml + EndProjectSection +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "scripts", "scripts", "{960DC223-117E-41DE-8A89-C85E3D69A8E8}" + ProjectSection(SolutionItems) = preProject + ..\tests\scripts\test-global-tool.sh = ..\tests\scripts\test-global-tool.sh + ..\tests\scripts\test-msbuild-task.sh = ..\tests\scripts\test-msbuild-task.sh + ..\tests\scripts\test-native-tool.sh = ..\tests\scripts\test-native-tool.sh + EndProjectSection +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU diff --git a/build/CI.sln.DotSettings b/build/CI.sln.DotSettings index f37a772647..4d7da80b2d 100644 --- a/build/CI.sln.DotSettings +++ b/build/CI.sln.DotSettings @@ -1,4 +1,5 @@ <wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation"> <s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=OS/@EntryIndexedValue">OS</s:String> <s:Boolean x:Key="/Default/UserDictionary/Words/=Addins/@EntryIndexedValue">True</s:Boolean> - <s:Boolean x:Key="/Default/UserDictionary/Words/=endgroup/@EntryIndexedValue">True</s:Boolean></wpf:ResourceDictionary> \ No newline at end of file + <s:Boolean x:Key="/Default/UserDictionary/Words/=endgroup/@EntryIndexedValue">True</s:Boolean> + <s:Boolean x:Key="/Default/UserDictionary/Words/=opencontainers/@EntryIndexedValue">True</s:Boolean></wpf:ResourceDictionary> \ No newline at end of file diff --git a/build/Directory.Build.props b/build/Directory.Build.props index cf7017fab7..edbb8dac4d 100644 --- a/build/Directory.Build.props +++ b/build/Directory.Build.props @@ -1,12 +1,12 @@ <Project> <PropertyGroup> <OutputType>Exe</OutputType> - <TargetFramework>net6.0</TargetFramework> + <TargetFramework>net8.0</TargetFramework> <RunWorkingDirectory>$(MSBuildProjectDirectory)</RunWorkingDirectory> <OutputPath>..\..\run\</OutputPath> <AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath> <Nullable>enable</Nullable> - <LangVersion>10</LangVersion> + <LangVersion>12</LangVersion> <NoWarn>NU1604</NoWarn> <ImplicitUsings>enable</ImplicitUsings> </PropertyGroup> @@ -37,5 +37,13 @@ <ItemGroup> <Using Include="Common.Utilities.Constants" Alias="Constants"/> </ItemGroup> + <ItemGroup> + <PackageReference Include="Cake.Compression" /> + <PackageReference Include="Cake.Frosting" /> + <PackageReference Include="Cake.Incubator" /> + <PackageReference Include="Cake.DotNetLocalTools.Module" /> + + <PackageReference Include="Cake.Docker" /> + </ItemGroup> </Project> diff --git a/build/Directory.Packages.props b/build/Directory.Packages.props index e035cee9d4..3632fa589a 100644 --- a/build/Directory.Packages.props +++ b/build/Directory.Packages.props @@ -1,12 +1,19 @@ -<Project> - <ItemGroup> - <PackageReference Include="Cake.Common" Version="2.2.0" /> - <PackageReference Include="Cake.Compression" Version="0.2.6" /> - <PackageReference Include="Cake.Frosting" Version="2.2.0" /> - <PackageReference Include="Cake.Incubator" Version="7.0.0" /> - <PackageReference Include="Cake.DotNetLocalTools.Module" Version="1.0.2" /> - - <PackageReference Include="Cake.Docker" Version="1.1.2" /> - - </ItemGroup> -</Project> +<Project> + <PropertyGroup> + <ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally> + </PropertyGroup> + <ItemGroup> + <PackageVersion Include="Cake.Compression" Version="0.3.0" /> + <PackageVersion Include="Cake.Codecov" Version="3.0.0" /> + <PackageVersion Include="Cake.Coverlet" Version="4.0.1" /> + <PackageVersion Include="Cake.Frosting" Version="4.0.0" /> + <PackageVersion Include="Cake.Frosting.Git" Version="4.0.0" /> + <PackageVersion Include="Cake.Http" Version="4.0.0" /> + <PackageVersion Include="Cake.Incubator" Version="8.0.0" /> + <PackageVersion Include="Cake.DotNetLocalTools.Module" Version="3.0.12" /> + <PackageVersion Include="Cake.Docker" Version="1.3.0" /> + <PackageVersion Include="Cake.Json" Version="7.0.1" /> + <PackageVersion Include="Cake.Wyam" Version="2.2.14" /> + <PackageVersion Include="xunit.assert" Version="2.9.0" /> + </ItemGroup> +</Project> \ No newline at end of file diff --git a/build/artifacts/BuildContext.cs b/build/artifacts/BuildContext.cs index 7976846434..9c3b353ede 100644 --- a/build/artifacts/BuildContext.cs +++ b/build/artifacts/BuildContext.cs @@ -2,15 +2,11 @@ namespace Artifacts; -public class BuildContext : BuildContextBase +public class BuildContext(ICakeContext context) : BuildContextBase(context) { - public string MsBuildConfiguration { get; set; } = "Release"; + public string MsBuildConfiguration { get; } = Constants.DefaultConfiguration; public bool IsDockerOnLinux { get; set; } public IEnumerable<DockerImage> Images { get; set; } = new List<DockerImage>(); - - public BuildContext(ICakeContext context) : base(context) - { - } } diff --git a/build/artifacts/BuildLifetime.cs b/build/artifacts/BuildLifetime.cs index 3b404a6700..8db724ade1 100644 --- a/build/artifacts/BuildLifetime.cs +++ b/build/artifacts/BuildLifetime.cs @@ -1,36 +1,39 @@ +using Common.Lifetime; using Common.Utilities; namespace Artifacts; public class BuildLifetime : BuildLifetimeBase<BuildContext> { - public override void Setup(BuildContext context) + public override void Setup(BuildContext context, ISetupContext info) { - base.Setup(context); + base.Setup(context, info); context.IsDockerOnLinux = context.DockerCustomCommand("info --format '{{.OSType}}'").First().Replace("'", string.Empty) == "linux"; - var architecture = context.HasArgument(Arguments.Architecture) ? context.Argument<Architecture>(Arguments.Architecture) : (Architecture?)null; var dockerRegistry = context.Argument(Arguments.DockerRegistry, DockerRegistry.DockerHub); var dotnetVersion = context.Argument(Arguments.DockerDotnetVersion, string.Empty).ToLower(); var dockerDistro = context.Argument(Arguments.DockerDistro, string.Empty).ToLower(); - var versions = string.IsNullOrWhiteSpace(dotnetVersion) ? Constants.VersionsToBuild : new[] { dotnetVersion }; - var distros = string.IsNullOrWhiteSpace(dockerDistro) ? Constants.DockerDistrosToBuild : new[] { dockerDistro }; - var archs = architecture.HasValue ? new[] { architecture.Value } : Constants.ArchToBuild; + var versions = string.IsNullOrWhiteSpace(dotnetVersion) ? Constants.Frameworks : [dotnetVersion]; + var distros = string.IsNullOrWhiteSpace(dockerDistro) ? Constants.DockerDistrosToBuild : [dockerDistro]; + + var architectures = context.HasArgument(Arguments.Architecture) ? context.Arguments<Architecture>(Arguments.Architecture) : Constants.ArchToBuild; + var platformArch = context.IsRunningOnAmd64() ? Architecture.Amd64 : Architecture.Arm64; var registry = dockerRegistry == DockerRegistry.DockerHub ? Constants.DockerHubRegistry : Constants.GitHubContainerRegistry; context.Images = from version in versions from distro in distros - from arch in archs + from arch in architectures select new DockerImage(distro, version, arch, registry, true); context.StartGroup("Build Setup"); LogBuildInformation(context); - context.Information("IsDockerOnLinux: {0}", context.IsDockerOnLinux); - context.Information($"Building for Version: {dotnetVersion}, Distro: {dockerDistro}"); + context.Information($"IsDockerOnLinux: {context.IsDockerOnLinux}"); + context.Information($"Building for Version: {dotnetVersion}, Distro: {dockerDistro}, Architecture: {platformArch}"); + context.EndGroup(); } } diff --git a/build/artifacts/Program.cs b/build/artifacts/Program.cs index 7b88e63bd5..332d44d6b1 100644 --- a/build/artifacts/Program.cs +++ b/build/artifacts/Program.cs @@ -7,5 +7,4 @@ .UseLifetime<BuildLifetime>() .UseTaskLifetime<BuildTaskLifetime>() .UseRootDirectory() - .InstallToolsFromRootManifest() .Run(args); diff --git a/build/artifacts/Tasks/ArtifactsDotnetToolTest.cs b/build/artifacts/Tasks/ArtifactsDotnetToolTest.cs index dc802c4cc6..2bf9641405 100644 --- a/build/artifacts/Tasks/ArtifactsDotnetToolTest.cs +++ b/build/artifacts/Tasks/ArtifactsDotnetToolTest.cs @@ -5,8 +5,8 @@ namespace Artifacts.Tasks; [TaskName(nameof(ArtifactsDotnetToolTest))] [TaskDescription("Tests the dotnet global tool in docker container")] [TaskArgument(Arguments.DockerRegistry, Constants.DockerHub, Constants.GitHub)] -[TaskArgument(Arguments.DockerDotnetVersion, Constants.Version50, Constants.Version60, Constants.Version31)] -[TaskArgument(Arguments.DockerDistro, Constants.Alpine312, Constants.Debian10, Constants.Ubuntu2004)] +[TaskArgument(Arguments.DockerDotnetVersion, Constants.Version60, Constants.Version80)] +[TaskArgument(Arguments.DockerDistro, Constants.AlpineLatest, Constants.DebianLatest, Constants.UbuntuLatest)] [IsDependentOn(typeof(ArtifactsPrepare))] public class ArtifactsDotnetToolTest : FrostingTask<BuildContext> { @@ -27,7 +27,7 @@ public override void Run(BuildContext context) foreach (var dockerImage in context.Images) { - if (context.SkipArm64Image(dockerImage)) continue; + if (context.SkipImageTesting(dockerImage)) continue; var cmd = $"{rootPrefix}/scripts/test-global-tool.sh --version {version} --nugetPath {rootPrefix}/nuget --repoPath {rootPrefix}/repo"; diff --git a/build/artifacts/Tasks/ArtifactsExecutableTest.cs b/build/artifacts/Tasks/ArtifactsExecutableTest.cs index 8127f1762a..7acc9f7b47 100644 --- a/build/artifacts/Tasks/ArtifactsExecutableTest.cs +++ b/build/artifacts/Tasks/ArtifactsExecutableTest.cs @@ -20,7 +20,7 @@ public override void Run(BuildContext context) { var packagesToTest = new[] { - "GitVersion.Commandline", "GitVersion.Portable" + "GitVersion.Portable" }; foreach (var packageToTest in packagesToTest) { @@ -47,10 +47,7 @@ private static void PackageTest(BuildContextBase context, string packageToTest) var settings = new GitVersionSettings { - OutputTypes = new HashSet<GitVersionOutput> - { - GitVersionOutput.Json - }, + OutputTypes = [GitVersionOutput.Json], ToolPath = outputDirectory.Combine(packageToTest).Combine("tools").CombineWithFilePath("gitversion.exe").FullPath }; var gitVersion = context.GitVersion(settings); diff --git a/build/artifacts/Tasks/ArtifactsMsBuildCoreTest.cs b/build/artifacts/Tasks/ArtifactsMsBuildCoreTest.cs index 28736a3717..c210ddae6f 100644 --- a/build/artifacts/Tasks/ArtifactsMsBuildCoreTest.cs +++ b/build/artifacts/Tasks/ArtifactsMsBuildCoreTest.cs @@ -5,8 +5,8 @@ namespace Artifacts.Tasks; [TaskName(nameof(ArtifactsMsBuildCoreTest))] [TaskDescription("Tests the msbuild package in docker container")] [TaskArgument(Arguments.DockerRegistry, Constants.DockerHub, Constants.GitHub)] -[TaskArgument(Arguments.DockerDotnetVersion, Constants.Version50, Constants.Version60, Constants.Version31)] -[TaskArgument(Arguments.DockerDistro, Constants.Alpine312, Constants.Debian10, Constants.Ubuntu2004)] +[TaskArgument(Arguments.DockerDotnetVersion, Constants.Version60, Constants.Version80)] +[TaskArgument(Arguments.DockerDistro, Constants.AlpineLatest, Constants.DebianLatest, Constants.UbuntuLatest)] [IsDependentOn(typeof(ArtifactsPrepare))] public class ArtifactsMsBuildCoreTest : FrostingTask<BuildContext> { @@ -14,7 +14,6 @@ public override bool ShouldRun(BuildContext context) { var shouldRun = true; shouldRun &= context.ShouldRun(context.IsDockerOnLinux, $"{nameof(ArtifactsMsBuildCoreTest)} works only on Docker on Linux agents."); - return shouldRun; } @@ -27,21 +26,9 @@ public override void Run(BuildContext context) foreach (var dockerImage in context.Images) { - if (context.SkipArm64Image(dockerImage)) continue; - - string distro = dockerImage.Distro; - string targetFramework = dockerImage.TargetFramework; - - if (targetFramework == Constants.Version31 && distro == Constants.Centos8) continue; // TODO check why this one fails - targetFramework = targetFramework switch - { - Constants.Version31 => $"netcoreapp{targetFramework}", - Constants.Version50 => $"net{targetFramework}", - Constants.Version60 => $"net{targetFramework}", - _ => targetFramework - }; + if (context.SkipImageTesting(dockerImage)) continue; - var cmd = $"{rootPrefix}/scripts/test-msbuild-task.sh --version {version} --nugetPath {rootPrefix}/nuget --repoPath {rootPrefix}/repo/tests/integration/core --targetframework {targetFramework}"; + var cmd = $"{rootPrefix}/scripts/test-msbuild-task.sh --version {version} --nugetPath {rootPrefix}/nuget --repoPath {rootPrefix}/repo/tests/integration --targetframework net{dockerImage.TargetFramework}"; context.DockerTestArtifact(dockerImage, cmd); } diff --git a/build/artifacts/Tasks/ArtifactsMsBuildFullTest.cs b/build/artifacts/Tasks/ArtifactsMsBuildFullTest.cs index 2799314e62..26d4f372d3 100644 --- a/build/artifacts/Tasks/ArtifactsMsBuildFullTest.cs +++ b/build/artifacts/Tasks/ArtifactsMsBuildFullTest.cs @@ -22,15 +22,14 @@ public override void Run(BuildContext context) var nugetSource = context.MakeAbsolute(Paths.Nuget).FullPath; - context.Information("\nTesting msbuild task with dotnet build (for .net core)\n"); - var frameworks = new[] { Constants.CoreFxVersion31, Constants.NetVersion50, Constants.NetVersion60 }; - foreach (var framework in frameworks) + context.Information("\nTesting msbuild task with dotnet build\n"); + foreach (var netVersion in Constants.Frameworks) { + var framework = $"net{netVersion}"; var dotnetMsBuildSettings = new DotNetMSBuildSettings(); - dotnetMsBuildSettings.WithProperty("TargetFrameworks", framework); - dotnetMsBuildSettings.WithProperty("TargetFramework", framework); + dotnetMsBuildSettings.SetTargetFramework(framework); dotnetMsBuildSettings.WithProperty("GitVersionMsBuildVersion", version); - var projPath = context.MakeAbsolute(Paths.Integration.Combine("core")); + var projPath = context.MakeAbsolute(Paths.Integration); context.DotNetBuild(projPath.FullPath, new DotNetBuildSettings { @@ -40,24 +39,8 @@ public override void Run(BuildContext context) Sources = new[] { nugetSource } }); - var netcoreExe = Paths.Integration.Combine("core").Combine("build").Combine(framework).CombineWithFilePath("app.dll"); - context.ValidateOutput("dotnet", netcoreExe.FullPath, context.Version.GitVersion.FullSemVer); + var exe = Paths.Integration.Combine("build").Combine(framework).CombineWithFilePath("app.dll"); + context.ValidateOutput("dotnet", exe.FullPath, context.Version.GitVersion.FullSemVer); } - - context.Information("\nTesting msbuild task with msbuild (for full framework)\n"); - - var msBuildSettings = new MSBuildSettings - { - Verbosity = Verbosity.Minimal, - Restore = true - }; - - msBuildSettings.WithProperty("GitVersionMsBuildVersion", version); - msBuildSettings.WithProperty("RestoreSource", nugetSource); - - context.MSBuild("./tests/integration/full", msBuildSettings); - - var fullExe = Paths.Integration.Combine("full").Combine("build").CombineWithFilePath("app.exe"); - context.ValidateOutput(fullExe.FullPath, null, context.Version.GitVersion.FullSemVer); } } diff --git a/build/artifacts/Tasks/ArtifactsNativeTest.cs b/build/artifacts/Tasks/ArtifactsNativeTest.cs index c4234b8687..464cd202b7 100644 --- a/build/artifacts/Tasks/ArtifactsNativeTest.cs +++ b/build/artifacts/Tasks/ArtifactsNativeTest.cs @@ -5,8 +5,8 @@ namespace Artifacts.Tasks; [TaskName(nameof(ArtifactsNativeTest))] [TaskDescription("Tests the native executables in docker container")] [TaskArgument(Arguments.DockerRegistry, Constants.DockerHub, Constants.GitHub)] -[TaskArgument(Arguments.DockerDotnetVersion, Constants.Version50, Constants.Version60, Constants.Version31)] -[TaskArgument(Arguments.DockerDistro, Constants.Alpine312, Constants.Debian10, Constants.Ubuntu2004)] +[TaskArgument(Arguments.DockerDotnetVersion, Constants.Version60, Constants.Version80)] +[TaskArgument(Arguments.DockerDistro, Constants.AlpineLatest, Constants.DebianLatest, Constants.UbuntuLatest)] [IsDependentOn(typeof(ArtifactsPrepare))] public class ArtifactsNativeTest : FrostingTask<BuildContext> { @@ -27,13 +27,15 @@ public override void Run(BuildContext context) foreach (var dockerImage in context.Images) { - if (context.SkipArm64Image(dockerImage)) continue; + if (context.SkipImageTesting(dockerImage)) continue; - var runtime = dockerImage.Architecture == Architecture.Amd64 ? "linux-x64" : "linux-arm64"; + var runtime = "linux"; if (dockerImage.Distro.StartsWith("alpine")) { - runtime = "linux-musl-x64"; + runtime += "-musl"; } + runtime += dockerImage.Architecture == Architecture.Amd64 ? "-x64" : "-arm64"; + var cmd = $"{rootPrefix}/scripts/test-native-tool.sh --version {version} --repoPath {rootPrefix}/repo --runtime {runtime}"; diff --git a/build/artifacts/Tasks/ArtifactsPrepare.cs b/build/artifacts/Tasks/ArtifactsPrepare.cs index c9075d42da..700a1bdf64 100644 --- a/build/artifacts/Tasks/ArtifactsPrepare.cs +++ b/build/artifacts/Tasks/ArtifactsPrepare.cs @@ -5,8 +5,8 @@ namespace Artifacts.Tasks; [TaskName(nameof(ArtifactsPrepare))] [TaskDescription("Pulls the docker images needed for testing the artifacts")] [TaskArgument(Arguments.DockerRegistry, Constants.DockerHub, Constants.GitHub)] -[TaskArgument(Arguments.DockerDotnetVersion, Constants.Version50, Constants.Version60, Constants.Version31)] -[TaskArgument(Arguments.DockerDistro, Constants.Alpine312, Constants.Debian10, Constants.Ubuntu2004)] +[TaskArgument(Arguments.DockerDotnetVersion, Constants.Version60, Constants.Version80)] +[TaskArgument(Arguments.DockerDistro, Constants.AlpineLatest, Constants.DebianLatest, Constants.UbuntuLatest)] public class ArtifactsPrepare : FrostingTask<BuildContext> { public override bool ShouldRun(BuildContext context) @@ -21,7 +21,7 @@ public override void Run(BuildContext context) { foreach (var dockerImage in context.Images) { - if (context.SkipArm64Image(dockerImage)) continue; + if (context.SkipImageTesting(dockerImage)) continue; context.DockerPullImage(dockerImage); } } diff --git a/build/artifacts/Tasks/ArtifactsTest.cs b/build/artifacts/Tasks/ArtifactsTest.cs index 36cd154310..3f781f68fa 100644 --- a/build/artifacts/Tasks/ArtifactsTest.cs +++ b/build/artifacts/Tasks/ArtifactsTest.cs @@ -5,8 +5,8 @@ namespace Artifacts.Tasks; [TaskName(nameof(ArtifactsTest))] [TaskDescription("Tests packages in docker container")] [TaskArgument(Arguments.DockerRegistry, Constants.DockerHub, Constants.GitHub)] -[TaskArgument(Arguments.DockerDotnetVersion, Constants.Version50, Constants.Version60, Constants.Version31)] -[TaskArgument(Arguments.DockerDistro, Constants.Alpine312, Constants.Debian10, Constants.Ubuntu2004)] +[TaskArgument(Arguments.DockerDotnetVersion, Constants.Version60, Constants.Version80)] +[TaskArgument(Arguments.DockerDistro, Constants.AlpineLatest, Constants.DebianLatest, Constants.UbuntuLatest)] [IsDependentOn(typeof(ArtifactsNativeTest))] [IsDependentOn(typeof(ArtifactsDotnetToolTest))] [IsDependentOn(typeof(ArtifactsMsBuildCoreTest))] diff --git a/build/artifacts/Tasks/Default.cs b/build/artifacts/Tasks/Default.cs index 69d435c477..702a604678 100644 --- a/build/artifacts/Tasks/Default.cs +++ b/build/artifacts/Tasks/Default.cs @@ -1,6 +1,4 @@ namespace Artifacts.Tasks; [TaskDescription("Shows this output")] -public class Default : Common.Tasks.Default -{ -} +public class Default : Common.Tasks.Default; diff --git a/build/build/BuildContext.cs b/build/build/BuildContext.cs index b36f9149c6..2580b482fd 100644 --- a/build/build/BuildContext.cs +++ b/build/build/BuildContext.cs @@ -3,15 +3,15 @@ namespace Build; -public class BuildContext : BuildContextBase +public class BuildContext(ICakeContext context) : BuildContextBase(context) { - public string MsBuildConfiguration { get; set; } = "Release"; + public string MsBuildConfiguration { get; set; } = Constants.DefaultConfiguration; public readonly Dictionary<PlatformFamily, string[]> NativeRuntimes = new() { - [PlatformFamily.Windows] = new[] { "win-x64", "win-x86", "win-arm64" }, - [PlatformFamily.Linux] = new[] { "linux-x64", "linux-musl-x64", "linux-arm64", "linux-musl-arm64" }, - [PlatformFamily.OSX] = new[] { "osx-x64", "osx-arm64" }, + [PlatformFamily.Windows] = ["win-x64", "win-arm64"], + [PlatformFamily.Linux] = ["linux-x64", "linux-musl-x64", "linux-arm64", "linux-musl-arm64"], + [PlatformFamily.OSX] = ["osx-x64", "osx-arm64"], }; public bool EnabledUnitTests { get; set; } @@ -19,8 +19,4 @@ public class BuildContext : BuildContextBase public Credentials? Credentials { get; set; } public DotNetMSBuildSettings MsBuildSettings { get; } = new(); - - public BuildContext(ICakeContext context) : base(context) - { - } } diff --git a/build/build/BuildLifetime.cs b/build/build/BuildLifetime.cs index 10dd99c4b4..fb16f3e2e2 100644 --- a/build/build/BuildLifetime.cs +++ b/build/build/BuildLifetime.cs @@ -1,24 +1,28 @@ using Build.Utilities; +using Common.Lifetime; using Common.Utilities; namespace Build; public class BuildLifetime : BuildLifetimeBase<BuildContext> { - public override void Setup(BuildContext context) + public override void Setup(BuildContext context, ISetupContext info) { - base.Setup(context); + base.Setup(context, info); - context.MsBuildConfiguration = context.Argument(Arguments.Configuration, "Release"); + context.MsBuildConfiguration = context.Argument(Arguments.Configuration, Constants.DefaultConfiguration); context.EnabledUnitTests = context.IsEnabled(EnvVars.EnabledUnitTests); context.Credentials = Credentials.GetCredentials(context); - SetMsBuildSettingsVersion(context); + if (context.Version is not null) + { + SetMsBuildSettingsVersion(context); + } context.StartGroup("Build Setup"); LogBuildInformation(context); - context.Information("Configuration: {0}", context.MsBuildConfiguration); + context.Information($"Configuration: {context.MsBuildConfiguration}"); context.EndGroup(); } @@ -37,5 +41,8 @@ private static void SetMsBuildSettingsVersion(BuildContext context) msBuildSettings.WithProperty("RepositoryCommit", version.GitVersion.Sha); msBuildSettings.WithProperty("NoPackageAnalysis", "true"); msBuildSettings.WithProperty("UseSharedCompilation", "false"); + + // https://github.com/dotnet/docs/issues/37674 + msBuildSettings.WithProperty("IncludeSourceRevisionInInformationalVersion", "false"); } } diff --git a/build/build/Program.cs b/build/build/Program.cs index 2ff100dcab..815289da5e 100644 --- a/build/build/Program.cs +++ b/build/build/Program.cs @@ -7,6 +7,5 @@ .UseLifetime<BuildLifetime>() .UseTaskLifetime<BuildTaskLifetime>() .UseRootDirectory() - .InstallToolsFromRootManifest() - .InstallNugetTool(Tools.NugetCmd, Tools.Versions[Tools.NugetCmd]) + .InstallNugetTool(Tools.CodecovUploaderCmd, Tools.Versions[Tools.CodecovUploaderCmd]) .Run(args); diff --git a/build/build/Tasks/Build.cs b/build/build/Tasks/Build.cs index ecd13f75d3..a20efdde4b 100644 --- a/build/build/Tasks/Build.cs +++ b/build/build/Tasks/Build.cs @@ -5,7 +5,7 @@ namespace Build.Tasks; [TaskName(nameof(Build))] [TaskDescription("Builds the solution")] [IsDependentOn(typeof(Clean))] -[IsDependentOn(typeof(CodeFormat))] +// [IsDependentOn(typeof(CodeFormat))] public sealed class Build : FrostingTask<BuildContext> { public override void Run(BuildContext context) @@ -16,7 +16,7 @@ public override void Run(BuildContext context) context.DotNetRestore(sln, new DotNetRestoreSettings { Verbosity = DotNetVerbosity.Minimal, - Sources = new[] { "https://api.nuget.org/v3/index.json" }, + Sources = new[] { Constants.NugetOrgUrl }, MSBuildSettings = context.MsBuildSettings }); diff --git a/build/build/Tasks/BuildPrepare.cs b/build/build/Tasks/BuildPrepare.cs new file mode 100644 index 0000000000..fe85bbb561 --- /dev/null +++ b/build/build/Tasks/BuildPrepare.cs @@ -0,0 +1,42 @@ +using Common.Utilities; + +namespace Build.Tasks; + +[TaskName(nameof(BuildPrepare))] +[TaskDescription("Builds the solution")] +[IsDependentOn(typeof(Clean))] +public sealed class BuildPrepare : FrostingTask<BuildContext> +{ + public override void Run(BuildContext context) + { + context.Information("Builds solution..."); + + const string sln = "./src/GitVersion.sln"; + context.DotNetRestore(sln, + new() + { + Verbosity = DotNetVerbosity.Minimal, + Sources = new[] { Constants.NugetOrgUrl }, + }); + + context.DotNetBuild("./src/GitVersion.App/GitVersion.App.csproj", + new() + { + Verbosity = DotNetVerbosity.Minimal, + Configuration = Constants.DefaultConfiguration, + OutputDirectory = Paths.Tools.Combine("gitversion"), + Framework = $"net{Constants.VersionLatest}", + NoRestore = true, + }); + + context.DotNetBuild("./src/GitVersion.Schema/GitVersion.Schema.csproj", + new() + { + Verbosity = DotNetVerbosity.Minimal, + Configuration = Constants.DefaultConfiguration, + OutputDirectory = Paths.Tools.Combine("schema"), + Framework = $"net{Constants.VersionLatest}", + NoRestore = true, + }); + } +} diff --git a/build/build/Tasks/Default.cs b/build/build/Tasks/Default.cs index 57b473ee58..42a99a37ee 100644 --- a/build/build/Tasks/Default.cs +++ b/build/build/Tasks/Default.cs @@ -1,6 +1,4 @@ namespace Build.Tasks; [TaskDescription("Shows this output")] -public class Default : Common.Tasks.Default -{ -} +public class Default : Common.Tasks.Default; diff --git a/build/build/Tasks/Package.cs b/build/build/Tasks/Package.cs index 00386c7320..38fefc0f80 100644 --- a/build/build/Tasks/Package.cs +++ b/build/build/Tasks/Package.cs @@ -5,6 +5,4 @@ namespace Build.Tasks; [IsDependentOn(typeof(PackageChocolatey))] [IsDependentOn(typeof(PackageNuget))] [IsDependentOn(typeof(PackageArchive))] -public class Package : FrostingTask<BuildContext> -{ -} +public class Package : FrostingTask<BuildContext>; diff --git a/build/build/Tasks/Package/PackageArchive.cs b/build/build/Tasks/Package/PackageArchive.cs index dadde1c36e..9e79b8852b 100644 --- a/build/build/Tasks/Package/PackageArchive.cs +++ b/build/build/Tasks/Package/PackageArchive.cs @@ -12,7 +12,7 @@ public override void Run(BuildContext context) { context.EnsureDirectoryExists(Paths.Native); - var platform = context.Environment.Platform.Family; + var platform = context.Platform; var runtimes = context.NativeRuntimes[platform]; foreach (var runtime in runtimes) diff --git a/build/build/Tasks/Package/PackageChocolatey.cs b/build/build/Tasks/Package/PackageChocolatey.cs index 81c3dcec60..73fbe63878 100644 --- a/build/build/Tasks/Package/PackageChocolatey.cs +++ b/build/build/Tasks/Package/PackageChocolatey.cs @@ -21,21 +21,50 @@ public override void Run(BuildContext context) { context.EnsureDirectoryExists(Paths.Nuget); - var portableNuspecFile = Paths.Nuspec.CombineWithFilePath("GitVersion.Portable.nuspec"); - if (!context.FileExists(portableNuspecFile)) - return; - var artifactPath = context.MakeAbsolute(Paths.ArtifactsBinPortable).FullPath; + var portableSettings = GetChocolateyPackSettings(context, "GitVersion.Portable"); + portableSettings.Files = context.GetFiles(artifactPath + "/**/*.*") + .Select(file => new ChocolateyNuSpecContent { Source = file.FullPath, Target = file.FullPath.Replace(artifactPath, "") }) + .ToArray(); + + context.ChocolateyPack(portableSettings); + + var metaPackageSettings = GetChocolateyPackSettings(context, "GitVersion"); + metaPackageSettings.Files = context.GetFiles(artifactPath + "/**/*.txt") + .Select(file => new ChocolateyNuSpecContent { Source = file.FullPath, Target = file.FullPath.Replace(artifactPath, "") }) + .ToArray(); + + metaPackageSettings.Dependencies = new[] + { + new ChocolateyNuSpecDependency { Id = "GitVersion.Portable", Version = context.Version?.ChocolateyVersion } + }; + + context.ChocolateyPack(metaPackageSettings); + } + + private static ChocolateyPackSettings GetChocolateyPackSettings(BuildContextBase context, string id) + { var chocolateySettings = new ChocolateyPackSettings { - LimitOutput = true, - Version = context.Version?.SemVersion, + Id = id, + Version = context.Version?.ChocolateyVersion, + Title = "GitVersion", + Description = "Derives SemVer information from a repository following GitFlow or GitHubFlow.", + Authors = new[] { "GitTools and Contributors" }, + Owners = new[] { "GitTools and Contributors" }, + Copyright = $"Copyright GitTools {DateTime.Now.Year}", + DocsUrl = new Uri("https://gitversion.net/docs/"), + LicenseUrl = new Uri("https://opensource.org/license/mit/"), + ProjectUrl = new Uri("https://github.com/GitTools/GitVersion"), + ProjectSourceUrl = new Uri("https://github.com/GitTools/GitVersion"), + IconUrl = new Uri("https://raw.githubusercontent.com/GitTools/graphics/master/GitVersion/Color/icon_100x100.png"), + RequireLicenseAcceptance = false, + Tags = new[] { "Git", "Versioning", "GitVersion", "GitFlowVersion", "GitFlow", "GitHubFlow", "SemVer" }, + ReleaseNotes = new[] { $"https://github.com/GitTools/GitVersion/releases/tag/{context.Version?.ChocolateyVersion}" }, OutputDirectory = Paths.Nuget, - Files = context.GetFiles(artifactPath + "/**/*.*") - .Select(file => new ChocolateyNuSpecContent { Source = file.FullPath, Target = file.FullPath.Replace(artifactPath, "") }) - .ToArray() + LimitOutput = true, }; - context.ChocolateyPack(portableNuspecFile, chocolateySettings); + return chocolateySettings; } } diff --git a/build/build/Tasks/Package/PackageNuget.cs b/build/build/Tasks/Package/PackageNuget.cs index ace94548b3..64186050c9 100644 --- a/build/build/Tasks/Package/PackageNuget.cs +++ b/build/build/Tasks/Package/PackageNuget.cs @@ -1,12 +1,10 @@ using Cake.Common.Tools.DotNet.Pack; -using Cake.Common.Tools.NuGet.Pack; using Common.Utilities; namespace Build.Tasks; [TaskName(nameof(PackageNuget))] [TaskDescription("Creates the nuget packages")] -[IsDependentOn(typeof(PackagePrepare))] public class PackageNuget : FrostingTask<BuildContext> { public override void Run(BuildContext context) @@ -14,7 +12,6 @@ public override void Run(BuildContext context) context.EnsureDirectoryExists(Paths.Nuget); PackageWithCli(context); - PackageUsingNuspec(context); } private static void PackageWithCli(BuildContext context) { @@ -34,33 +31,4 @@ private static void PackageWithCli(BuildContext context) settings.ArgumentCustomization = arg => arg.Append("/p:IsPackaging=true"); context.DotNetPack("./src/GitVersion.MsBuild", settings); } - private static void PackageUsingNuspec(BuildContextBase context) - { - var cmdlineNuspecFile = Paths.Nuspec.CombineWithFilePath("GitVersion.CommandLine.nuspec"); - if (!context.FileExists(cmdlineNuspecFile)) - return; - - var artifactPath = context.MakeAbsolute(Paths.ArtifactsBinCmdline).FullPath; - var version = context.Version; - var gitVersion = version?.GitVersion; - var nugetSettings = new NuGetPackSettings - { - // KeepTemporaryNuSpecFile = true, - Version = version?.NugetVersion, - NoPackageAnalysis = true, - OutputDirectory = Paths.Nuget, - Repository = new NuGetRepository - { - Branch = gitVersion?.BranchName, - Commit = gitVersion?.Sha - }, - Files = context.GetFiles(artifactPath + "/**/*.*") - .Select(file => new NuSpecContent { Source = file.FullPath, Target = file.FullPath.Replace(artifactPath, "") }) - .Concat(context.GetFiles("docs/**/package_icon.png").Select(file => new NuSpecContent { Source = file.FullPath, Target = "package_icon.png" })) - .Concat(context.GetFiles("build/nuspec/README.md").Select(file => new NuSpecContent { Source = file.FullPath, Target = "README.md" })) - .ToArray() - }; - - context.NuGetPack(cmdlineNuspecFile, nugetSettings); - } } diff --git a/build/build/Tasks/Package/PackagePrepare.cs b/build/build/Tasks/Package/PackagePrepare.cs index 646d2dea3e..7526ecffc9 100644 --- a/build/build/Tasks/Package/PackagePrepare.cs +++ b/build/build/Tasks/Package/PackagePrepare.cs @@ -15,11 +15,6 @@ public override void Run(BuildContext context) var sourceDir = Paths.Native.Combine(PlatformFamily.Windows.ToString()).Combine("win-x64"); var sourceFiles = context.GetFiles(sourceDir + "/*.*"); - var cmdlineDir = Paths.ArtifactsBinCmdline.Combine("tools"); - - context.EnsureDirectoryExists(cmdlineDir); - context.CopyFiles(sourceFiles, cmdlineDir); - var portableDir = Paths.ArtifactsBinPortable.Combine("tools"); context.EnsureDirectoryExists(portableDir); @@ -30,7 +25,7 @@ public override void Run(BuildContext context) private static void PackPrepareNative(BuildContext context) { // publish single file for all native runtimes (self contained) - var platform = context.Environment.Platform.Family; + var platform = context.Platform; var runtimes = context.NativeRuntimes[platform]; foreach (var runtime in runtimes) @@ -39,22 +34,24 @@ private static void PackPrepareNative(BuildContext context) // testing windows and macos artifacts, the linux is tested with docker if (platform == PlatformFamily.Linux) continue; - if (runtime.EndsWith("arm64")) continue; - context.Information("Validating native lib:"); - var nativeExe = outputPath.CombineWithFilePath(context.IsOnWindows ? "gitversion.exe" : "gitversion"); - context.ValidateOutput(nativeExe.FullPath, "/showvariable FullSemver", context.Version?.GitVersion?.FullSemVer); + if (context.IsRunningOnAmd64() && runtime.EndsWith("x64") || context.IsRunningOnArm64() && runtime.EndsWith("arm64")) + { + context.Information("Validating native lib:"); + var nativeExe = outputPath.CombineWithFilePath(context.IsOnWindows ? "gitversion.exe" : "gitversion"); + context.ValidateOutput(nativeExe.FullPath, "/showvariable FullSemver", context.Version?.GitVersion?.FullSemVer); + } } } private static DirectoryPath PackPrepareNative(BuildContext context, string runtime) { - var platform = context.Environment.Platform.Family; + var platform = context.Platform; var outputPath = Paths.Native.Combine(platform.ToString().ToLower()).Combine(runtime); var settings = new DotNetPublishSettings { - Framework = Constants.NetVersion60, + Framework = $"net{Constants.VersionLatest}", Runtime = runtime, NoRestore = false, Configuration = context.MsBuildConfiguration, @@ -65,12 +62,6 @@ private static DirectoryPath PackPrepareNative(BuildContext context, string runt SelfContained = true }; - // workaround for https://github.com/dotnet/runtime/issues/49508 - if (runtime == "osx-arm64") - { - settings.ArgumentCustomization = arg => arg.Append("/p:OsxArm64=true"); - } - context.DotNetPublish("./src/GitVersion.App/GitVersion.App.csproj", settings); return outputPath; diff --git a/build/build/Tasks/Test.cs b/build/build/Tasks/Test.cs index e8bf15f20a..e659371ec8 100644 --- a/build/build/Tasks/Test.cs +++ b/build/build/Tasks/Test.cs @@ -3,6 +3,4 @@ namespace Build.Tasks; [TaskName(nameof(Test))] [TaskDescription("(CI only) Run the tests and publish the results")] [IsDependentOn(typeof(PublishCoverage))] -public class Test : FrostingTask<BuildContext> -{ -} +public class Test : FrostingTask<BuildContext>; diff --git a/build/build/Tasks/Test/PublishCoverage.cs b/build/build/Tasks/Test/PublishCoverage.cs index 1273c881da..6f754c72d6 100644 --- a/build/build/Tasks/Test/PublishCoverage.cs +++ b/build/build/Tasks/Test/PublishCoverage.cs @@ -12,14 +12,16 @@ public override bool ShouldRun(BuildContext context) { var shouldRun = true; shouldRun &= context.ShouldRun(context.IsOnWindows, $"{nameof(PublishCoverage)} works only on Windows agents."); - shouldRun &= context.ShouldRun(context.IsOnMainOrSupportBranchOriginalRepo, $"{nameof(PublishCoverage)} works only for on main or release branch original repository."); + shouldRun &= context.ShouldRun(context.IsReleaseBranchOriginalRepo, $"{nameof(PublishCoverage)} works only for main or release branch, original repository."); return shouldRun; } public override void Run(BuildContext context) { - var coverageFiles = context.GetFiles($"{Paths.TestOutput}/*.coverage.*.xml"); + var coverageFiles = context + .GetFiles($"{Paths.TestOutput}/*.coverage.*.xml") + .Select(file => context.MakeRelative(file).ToString()).ToArray(); var token = context.Credentials?.CodeCov?.Token; if (string.IsNullOrEmpty(token)) @@ -27,13 +29,10 @@ public override void Run(BuildContext context) throw new InvalidOperationException("Could not resolve CodeCov token."); } - foreach (var coverageFile in coverageFiles) + context.Codecov(new CodecovSettings { - context.Codecov(new CodecovSettings - { - Files = new[] { coverageFile.ToString() }, - Token = token - }); - } + Files = coverageFiles, + Token = token + }); } } diff --git a/build/build/Tasks/Test/UnitTest.cs b/build/build/Tasks/Test/UnitTest.cs index a21367d852..7916c29e17 100644 --- a/build/build/Tasks/Test/UnitTest.cs +++ b/build/build/Tasks/Test/UnitTest.cs @@ -8,7 +8,7 @@ namespace Build.Tasks; [TaskName(nameof(UnitTest))] [TaskDescription("Run the unit tests")] -[TaskArgument(Arguments.DotnetTarget, Constants.NetVersion50, Constants.NetVersion60, Constants.CoreFxVersion31, Constants.FullFxVersion48)] +[TaskArgument(Arguments.DotnetTarget, Constants.Version60, Constants.Version80)] [IsDependentOn(typeof(Build))] public class UnitTest : FrostingTask<BuildContext> { @@ -17,14 +17,14 @@ public class UnitTest : FrostingTask<BuildContext> public override void Run(BuildContext context) { var dotnetTarget = context.Argument(Arguments.DotnetTarget, string.Empty); - var frameworks = new[] { Constants.CoreFxVersion31, Constants.FullFxVersion48, Constants.NetVersion50, Constants.NetVersion60 }; + var frameworks = Constants.Frameworks; if (!string.IsNullOrWhiteSpace(dotnetTarget)) { if (!frameworks.Contains(dotnetTarget, StringComparer.OrdinalIgnoreCase)) { throw new Exception($"Dotnet Target {dotnetTarget} is not supported at the moment"); } - frameworks = new[] { dotnetTarget }; + frameworks = [dotnetTarget]; } foreach (var framework in frameworks) @@ -48,12 +48,12 @@ public override void OnError(Exception exception, BuildContext context) public override void Finally(BuildContext context) { var testResultsFiles = context.GetFiles($"{Paths.TestOutput}/*.results.xml"); - if (!context.IsAzurePipelineBuild || !testResultsFiles.Any()) return; + if (!context.IsAzurePipelineBuild || testResultsFiles.Count == 0) return; var data = new AzurePipelinesPublishTestResultsData { TestResultsFiles = testResultsFiles.ToArray(), - Platform = context.Environment.Platform.Family.ToString(), + Platform = context.Platform.ToString(), TestRunner = AzurePipelinesTestRunnerType.JUnit }; context.BuildSystem().AzurePipelines.Commands.PublishTestResults(data); @@ -62,21 +62,18 @@ public override void Finally(BuildContext context) private static void TestProjectForTarget(BuildContext context, FilePath project, string framework) { var testResultsPath = Paths.TestOutput; - var projectName = $"{project.GetFilenameWithoutExtension()}.{framework}"; + var projectName = $"{project.GetFilenameWithoutExtension()}.net{framework}"; var settings = new DotNetTestSettings { - Framework = framework, + Framework = $"net{framework}", NoBuild = true, NoRestore = true, Configuration = context.MsBuildConfiguration, + TestAdapterPath = new(".") }; - if (!context.IsRunningOnMacOs()) - { - settings.TestAdapterPath = new DirectoryPath("."); - var resultsPath = context.MakeAbsolute(testResultsPath.CombineWithFilePath($"{projectName}.results.xml")); - settings.Loggers = new[] { $"junit;LogFilePath={resultsPath}" }; - } + var resultsPath = context.MakeAbsolute(testResultsPath.CombineWithFilePath($"{projectName}.results.xml")); + settings.Loggers = new[] { $"junit;LogFilePath={resultsPath}" }; var coverletSettings = new CoverletSettings { @@ -84,14 +81,9 @@ private static void TestProjectForTarget(BuildContext context, FilePath project, CoverletOutputFormat = CoverletOutputFormat.cobertura, CoverletOutputDirectory = testResultsPath, CoverletOutputName = $"{projectName}.coverage.xml", - Exclude = new List<string> { "[GitVersion*.Tests]*", "[GitTools.Testing]*" } + Exclude = ["[GitVersion*.Tests]*", "[GitTools.Testing]*"] }; - if (string.Equals(framework, Constants.FullFxVersion48)) - { - settings.Filter = context.IsRunningOnUnix() ? $"TestCategory!={Constants.NoMono}" : $"TestCategory!={Constants.NoNet48}"; - } - context.DotNetTest(project.FullPath, settings, coverletSettings); } } diff --git a/build/build/Tasks/ValidateVersion.cs b/build/build/Tasks/ValidateVersion.cs index c0545f18f3..317a5caa7b 100644 --- a/build/build/Tasks/ValidateVersion.cs +++ b/build/build/Tasks/ValidateVersion.cs @@ -1,4 +1,3 @@ -using Build.Utilities; using Common.Utilities; namespace Build.Tasks; @@ -10,7 +9,7 @@ public class ValidateVersion : FrostingTask<BuildContext> { public override void Run(BuildContext context) { - var gitversionTool = context.GetGitVersionToolLocation(); - context.ValidateOutput("dotnet", $"\"{gitversionTool}\" -version", context.Version!.GitVersion!.InformationalVersion!); + var gitVersionTool = context.GetGitVersionToolLocation(); + context.ValidateOutput("dotnet", $"\"{gitVersionTool}\" -version", context.Version!.GitVersion!.InformationalVersion!); } } diff --git a/build/build/Utilities/ContextExtensions.cs b/build/build/Utilities/ContextExtensions.cs deleted file mode 100644 index edb9b99846..0000000000 --- a/build/build/Utilities/ContextExtensions.cs +++ /dev/null @@ -1,7 +0,0 @@ -namespace Build.Utilities; - -public static class ContextExtensions -{ - public static FilePath? GetGitVersionToolLocation(this BuildContext context) => - context.GetFiles($"src/GitVersion.App/bin/{context.MsBuildConfiguration}/{Constants.NetVersion60}/gitversion.dll").SingleOrDefault(); -} diff --git a/build/build/Utilities/Credentials.cs b/build/build/Utilities/Credentials.cs index 9735ef2e63..058ccde33a 100644 --- a/build/build/Utilities/Credentials.cs +++ b/build/build/Utilities/Credentials.cs @@ -4,10 +4,10 @@ namespace Build.Utilities; public class Credentials { - public CodeCovCredentials? CodeCov { get; private set; } + public CodeCovCredentials? CodeCov { get; private init; } public static Credentials GetCredentials(ICakeContext context) => new() { - CodeCov = new CodeCovCredentials(context.EnvironmentVariable("CODECOV_TOKEN")), + CodeCov = new(context.EnvironmentVariable("CODECOV_TOKEN")), }; } diff --git a/build/build/build.csproj b/build/build/build.csproj index 55494cff57..7f35470aa1 100644 --- a/build/build/build.csproj +++ b/build/build/build.csproj @@ -7,7 +7,7 @@ <ProjectReference Include="..\common\common.csproj" /> </ItemGroup> <ItemGroup> - <PackageReference Include="Cake.Codecov" Version="1.0.1" /> - <PackageReference Include="Cake.Coverlet" Version="2.5.4" /> + <PackageReference Include="Cake.Codecov" /> + <PackageReference Include="Cake.Coverlet" /> </ItemGroup> </Project> diff --git a/build/chores/BuildContext.cs b/build/chores/BuildContext.cs index 92660009f3..8f832935b6 100644 --- a/build/chores/BuildContext.cs +++ b/build/chores/BuildContext.cs @@ -1,8 +1,3 @@ namespace Chores; -public class BuildContext : FrostingContext -{ - public BuildContext(ICakeContext context) : base(context) - { - } -} +public class BuildContext(ICakeContext context) : FrostingContext(context); diff --git a/build/chores/BuildLifetime.cs b/build/chores/BuildLifetime.cs index 12dc380a02..032173a7d7 100644 --- a/build/chores/BuildLifetime.cs +++ b/build/chores/BuildLifetime.cs @@ -4,7 +4,7 @@ namespace Chores; public class BuildLifetime : FrostingLifetime<BuildContext> { - public override void Setup(BuildContext context) + public override void Setup(BuildContext context, ISetupContext info) { context.StartGroup("Build Setup"); context.EndGroup(); diff --git a/build/chores/Program.cs b/build/chores/Program.cs index e25d09e313..3eaeb288d7 100644 --- a/build/chores/Program.cs +++ b/build/chores/Program.cs @@ -2,5 +2,4 @@ return new CakeHost() .UseContext<BuildContext>() - .UseStartup<Startup>() .Run(args); diff --git a/build/chores/Startup.cs b/build/chores/Startup.cs deleted file mode 100644 index d326a2531c..0000000000 --- a/build/chores/Startup.cs +++ /dev/null @@ -1,13 +0,0 @@ -using Common.Lifetime; -using Microsoft.Extensions.DependencyInjection; - -namespace Chores; - -public class Startup : IFrostingStartup -{ - public void Configure(IServiceCollection services) - { - services.UseLifetime<BuildLifetime>(); - services.UseTaskLifetime<BuildTaskLifetime>(); - } -} diff --git a/build/chores/Tasks/Default.cs b/build/chores/Tasks/Default.cs index 0df4f50886..a2d01e0324 100644 --- a/build/chores/Tasks/Default.cs +++ b/build/chores/Tasks/Default.cs @@ -1,6 +1,4 @@ namespace Chores.Tasks; [TaskDescription("Shows this output")] -public class Default : Common.Tasks.Default -{ -} +public class Default : Common.Tasks.Default; diff --git a/build/chores/Tasks/ToolsInstall.cs b/build/chores/Tasks/ToolsInstall.cs deleted file mode 100644 index fdbec90d67..0000000000 --- a/build/chores/Tasks/ToolsInstall.cs +++ /dev/null @@ -1,22 +0,0 @@ -using Cake.Json; -using Newtonsoft.Json.Linq; - -namespace Chores.Tasks; - -[TaskName(nameof(ToolsInstall))] -[TaskDescription("Install dotnet global tools to 'tools' folder")] -public class ToolsInstall : FrostingTask<BuildContext> -{ - public override void Run(BuildContext context) - { - var json = context.ParseJsonFromFile("dotnet-tools.json"); - var jToken = json["tools"]; - if (jToken == null) return; - - var tools = jToken.Select(x => (JProperty)x).ToDictionary(x => x.Name, x => x.Value["version"]?.Value<string>()); - foreach (var (toolName, version) in tools) - { - // context.DotNetTool($"tool update --tool-path {context.Configuration.GetToolPath()} --version {version} {toolName}"); - } - } -} diff --git a/build/chores/Tasks/ToolsUpdate.cs b/build/chores/Tasks/ToolsUpdate.cs deleted file mode 100644 index fdc5156789..0000000000 --- a/build/chores/Tasks/ToolsUpdate.cs +++ /dev/null @@ -1,23 +0,0 @@ -using Cake.Json; -using Newtonsoft.Json.Linq; - -namespace Chores.Tasks; - -[TaskName(nameof(ToolsUpdate))] -[TaskDescription("Update dotnet local tools")] -public class ToolsUpdate : FrostingTask<BuildContext> -{ - public override void Run(BuildContext context) - { - var json = context.ParseJsonFromFile("dotnet-tools.json"); - var jToken = json["tools"]; - if (jToken != null) - { - var tools = jToken.Select(x => ((JProperty)x).Name).ToArray(); - foreach (var tool in tools) - { - context.DotNetTool($"tool update --local {tool}"); - } - } - } -} diff --git a/build/chores/chores.csproj b/build/chores/chores.csproj index 7795f57080..9779cfabf7 100644 --- a/build/chores/chores.csproj +++ b/build/chores/chores.csproj @@ -7,6 +7,6 @@ <ProjectReference Include="..\common\common.csproj" /> </ItemGroup> <ItemGroup> - <PackageReference Include="Cake.Json" Version="7.0.1" /> + <PackageReference Include="Cake.Json" /> </ItemGroup> </Project> diff --git a/build/common/Addins/Cake.Coverlet/ArgumentsProcessor.cs b/build/common/Addins/Cake.Coverlet/ArgumentsProcessor.cs deleted file mode 100644 index 89059e2f77..0000000000 --- a/build/common/Addins/Cake.Coverlet/ArgumentsProcessor.cs +++ /dev/null @@ -1,157 +0,0 @@ -using Cake.Coverlet; - -namespace Common.Addins.Cake.Coverlet; - -internal static class ArgumentsProcessor -{ - public static ProcessArgumentBuilder ProcessMSBuildArguments( - CoverletSettings settings, - ICakeEnvironment cakeEnvironment, - ProcessArgumentBuilder builder, - FilePath project) - { - builder.AppendMSBuildProperty(nameof(CoverletSettings.CollectCoverage), settings.CollectCoverage.ToString()); - builder.AppendPropertyList(nameof(CoverletSettings.CoverletOutputFormat), SplitFlagEnum(settings.CoverletOutputFormat)); - - if (settings.Threshold.HasValue) - { - if (settings.Threshold > 100) - { - throw new Exception("Threshold Percentage cannot be set as greater than 100%"); - } - - builder.AppendMSBuildProperty(nameof(CoverletSettings.Threshold), settings.Threshold.ToString()!); - - if (settings.ThresholdType != ThresholdType.NotSet) - { - builder.AppendPropertyList(nameof(CoverletSettings.ThresholdType), SplitFlagEnum(settings.ThresholdType)); - } - } - - if (settings.CoverletOutputDirectory != null && string.IsNullOrEmpty(settings.CoverletOutputName)) - { - var directoryPath = settings.CoverletOutputDirectory - .MakeAbsolute(cakeEnvironment).FullPath; - - builder.AppendMSBuildPropertyQuoted("CoverletOutput", directoryPath); - } - else if (!string.IsNullOrEmpty(settings.CoverletOutputName)) - { - var dir = settings.CoverletOutputDirectory ?? project.GetDirectory(); - var directoryPath = dir.MakeAbsolute(cakeEnvironment).FullPath; - - var filepath = FilePath.FromString(settings.OutputTransformer(settings.CoverletOutputName, directoryPath)); - - builder.AppendMSBuildPropertyQuoted("CoverletOutput", filepath.MakeAbsolute(cakeEnvironment).FullPath); - } - - if (settings.ExcludeByFile.Count > 0) - { - builder.AppendPropertyList(nameof(CoverletSettings.ExcludeByFile), settings.ExcludeByFile); - } - - - if (settings.Include.Count > 0) - { - builder.AppendPropertyList(nameof(CoverletSettings.Include), settings.Include); - } - - - if (settings.Exclude.Count > 0) - { - builder.AppendPropertyList(nameof(CoverletSettings.Exclude), settings.Exclude); - } - - if (settings.ExcludeByAttribute.Count > 0) - { - builder.AppendPropertyList(nameof(CoverletSettings.ExcludeByAttribute), settings.ExcludeByAttribute); - } - - if (settings.MergeWithFile != null && settings.MergeWithFile.GetExtension() == ".json") - { - builder.AppendMSBuildPropertyQuoted("MergeWith", settings.MergeWithFile.MakeAbsolute(cakeEnvironment).FullPath); - } - - if (settings.IncludeTestAssembly.HasValue) - { - builder.AppendMSBuildProperty(nameof(CoverletSettings.IncludeTestAssembly), settings.IncludeTestAssembly.Value ? bool.TrueString : bool.FalseString); - } - - return builder; - } - - public static ProcessArgumentBuilder ProcessToolArguments( - CoverletSettings settings, - ICakeEnvironment cakeEnvironment, - ProcessArgumentBuilder builder, - FilePath project) - { - builder.AppendSwitch("--format", SplitFlagEnum(settings.CoverletOutputFormat)); - - if (settings.Threshold.HasValue) - { - if (settings.Threshold > 100) - { - throw new Exception("Threshold Percentage cannot be set as greater than 100%"); - } - - builder.AppendSwitch(nameof(CoverletSettings.Threshold), settings.Threshold.ToString()); - - if (settings.ThresholdType != ThresholdType.NotSet) - { - builder.AppendSwitchQuoted("--threshold-type", SplitFlagEnum(settings.ThresholdType)); - } - } - - if (settings.CoverletOutputDirectory != null && string.IsNullOrEmpty(settings.CoverletOutputName)) - { - var directoryPath = settings.CoverletOutputDirectory - .MakeAbsolute(cakeEnvironment).FullPath; - - builder.AppendSwitchQuoted("--output", directoryPath); - } - else if (!string.IsNullOrEmpty(settings.CoverletOutputName)) - { - var dir = settings.CoverletOutputDirectory ?? project.GetDirectory(); - var directoryPath = dir.MakeAbsolute(cakeEnvironment).FullPath; - - var filepath = FilePath.FromString(settings.OutputTransformer(settings.CoverletOutputName, directoryPath)); - - builder.AppendSwitchQuoted("--output", filepath.MakeAbsolute(cakeEnvironment).FullPath); - } - - if (settings.ExcludeByFile.Count > 0) - { - builder.AppendSwitchQuoted("--exclude-by-file", settings.ExcludeByFile); - } - - if (settings.ExcludeByAttribute.Count > 0) - { - builder.AppendSwitchQuoted("--exclude-by-attribute", settings.ExcludeByAttribute); - } - - if (settings.Exclude.Count > 0) - { - builder.AppendSwitchQuoted("--exclude", settings.Exclude); - } - - if (settings.Include.Count > 0) - { - builder.AppendSwitchQuoted("--include", settings.Include); - } - - if (settings.MergeWithFile != null && settings.MergeWithFile.GetExtension() == ".json") - { - builder.AppendSwitchQuoted("--merge-with", settings.MergeWithFile.MakeAbsolute(cakeEnvironment).FullPath); - } - - if (settings.IncludeTestAssembly.HasValue) - { - builder.AppendSwitch("--include-test-assembly", settings.IncludeTestAssembly.Value ? bool.TrueString : bool.FalseString); - } - - return builder; - } - - private static IEnumerable<string> SplitFlagEnum(Enum @enum) => @enum.ToString("g").Split(',').Select(s => s.ToLowerInvariant()); -} diff --git a/build/common/Addins/Cake.Coverlet/BuilderExtension.cs b/build/common/Addins/Cake.Coverlet/BuilderExtension.cs deleted file mode 100644 index ff552820b9..0000000000 --- a/build/common/Addins/Cake.Coverlet/BuilderExtension.cs +++ /dev/null @@ -1,40 +0,0 @@ -namespace Common.Addins.Cake.Coverlet; - -internal static class BuilderExtension -{ - internal static ProcessArgumentBuilder AppendMSBuildProperty(this ProcessArgumentBuilder builder, string propertyName, string value) - { - builder.AppendSwitch($"/property:{propertyName}", "=", value); - return builder; - } - - internal static ProcessArgumentBuilder AppendMSBuildPropertyQuoted(this ProcessArgumentBuilder builder, string propertyName, string value) - { - builder.AppendSwitchQuoted($"/property:{propertyName}", "=", value); - return builder; - } - - internal static ProcessArgumentBuilder AppendPropertyList(this ProcessArgumentBuilder builder, string propertyName, IEnumerable<string> values) - { - builder.Append($"/property:{propertyName}=\\\"{string.Join(",", values.Select(s => s.Trim()))}\\\""); - return builder; - } - - internal static ProcessArgumentBuilder AppendSwitchQuoted(this ProcessArgumentBuilder builder, string @switch, IEnumerable<string> values) - { - foreach (var type in values.Select(s => s.Trim())) - { - builder.AppendSwitchQuoted(@switch, type); - } - return builder; - } - - internal static ProcessArgumentBuilder AppendSwitch(this ProcessArgumentBuilder builder, string @switch, IEnumerable<string> values) - { - foreach (var type in values.Select(s => s.Trim())) - { - builder.AppendSwitch(@switch, type); - } - return builder; - } -} diff --git a/build/common/Addins/Cake.Docker/Constants.cs b/build/common/Addins/Cake.Docker/Constants.cs new file mode 100644 index 0000000000..1545461c0c --- /dev/null +++ b/build/common/Addins/Cake.Docker/Constants.cs @@ -0,0 +1,12 @@ +namespace Common.Addins.Cake.Docker; + +/// <summary> +/// Constants +/// </summary> +public static class Constants +{ + /// <summary> + /// Used with <see cref="AutoPropertyAttribute.Format"/> when a bool argument defaults to true. + /// </summary> + public const string BoolWithTrueDefaultFormat = "--{0}={1}"; +} diff --git a/build/common/Addins/Cake.Docker/DockerBuildXBuildSettings.cs b/build/common/Addins/Cake.Docker/DockerBuildXBuildSettings.cs new file mode 100644 index 0000000000..ef196c408e --- /dev/null +++ b/build/common/Addins/Cake.Docker/DockerBuildXBuildSettings.cs @@ -0,0 +1,199 @@ +#nullable disable +namespace Common.Addins.Cake.Docker; + +/// <summary> +/// Settings for docker buildx build. +/// </summary> +public sealed class DockerBuildXBuildSettings : AutoToolSettings +{ + /// <summary> + /// Add a custom host-to-IP mapping (format: "host:ip") + /// </summary> + [AutoProperty(AutoArrayType = AutoArrayType.List)] + public string[] AddHost { get; set; } + /// <summary> + /// Allow extra privileged entitlement (e.g., "network.host", "security.insecure") + /// </summary> + [AutoProperty(AutoArrayType = AutoArrayType.List)] + public string[] Allow { get; set; } + /// <summary> + /// Set build-time variables + /// </summary> + [AutoProperty(AutoArrayType = AutoArrayType.List)] + public string[] BuildArg { get; set; } + /// <summary> + /// Additional build contexts (e.g., name=path) + /// </summary> + [AutoProperty(AutoArrayType = AutoArrayType.List)] + public string[] BuildContext { get; set; } + /// <summary> + /// Override the configured builder instance + /// </summary> + public string Builder { get; set; } + /// <summary> + /// External cache sources (e.g., "user/app:cache", "type=local,src=path/to/dir") + /// </summary> + [AutoProperty(AutoArrayType = AutoArrayType.List)] + public string[] CacheFrom { get; set; } + /// <summary> + /// Cache export destinations (e.g., "user/app:cache", "type=local,dest=path/to/dir") + /// </summary> + [AutoProperty(AutoArrayType = AutoArrayType.List)] + public string[] CacheTo { get; set; } + /// <summary> + /// Optional parent cgroup for the container + /// </summary> + public string CgroupParent { get; set; } + /// <summary> + /// Compress the build context using gzip + /// </summary> + public bool? Compress { get; set; } + /// <summary> + /// Limit the CPU CFS (Completely Fair Scheduler) period + /// </summary> + public long? CpuPeriod { get; set; } + /// <summary> + /// Limit the CPU CFS (Completely Fair Scheduler) quota + /// </summary> + public long? CpuQuota { get; set; } + /// <summary> + /// CPUs in which to allow execution (0-3, 0,1) + /// </summary> + public string CpusetCpus { get; set; } + /// <summary> + /// MEMs in which to allow execution (0-3, 0,1) + /// </summary> + public string CpusetMems { get; set; } + /// <summary> + /// CPU shares (relative weight) + /// </summary> + public long? CpuShares { get; set; } + /// <summary> + /// Skip image verification + /// </summary> + [AutoProperty(Format = Constants.BoolWithTrueDefaultFormat)] + public bool? DisableContentTrust { get; set; } + /// <summary> + /// Name of the Dockerfile (default: "PATH/Dockerfile") + /// </summary> + public string File { get; set; } + /// <summary> + /// Always remove intermediate containers + /// </summary> + public bool? ForceRm { get; set; } + /// <summary> + /// Write the image ID to the file + /// </summary> + public string Iidfile { get; set; } + /// <summary> + /// Container isolation technology + /// </summary> + public string Isolation { get; set; } + /// <summary> + /// Set metadata for an image + /// </summary> + [AutoProperty(AutoArrayType = AutoArrayType.List)] + public string[] Label { get; set; } + /// <summary> + /// Shorthand for "--output=type=docker" + /// </summary> + public bool Load { get; set; } + /// <summary> + /// Memory limit + /// </summary> + public string Memory { get; set; } + /// <summary> + /// Swap limit equal to memory plus swap: '-1' to enable unlimited swap + /// </summary> + public string MemorySwap { get; set; } + /// <summary> + /// Write build result metadata to the file + /// </summary> + public string MetadataFile { get; set; } + /// <summary> + /// Set the networking mode for the "RUN" instructions during build (default "default") + /// </summary> + public string Network { get; set; } + /// <summary> + /// Do not use cache when building the image + /// </summary> + public bool NoCache { get; set; } + /// <summary> + /// Do not cache specified stages + /// </summary> + [AutoProperty(AutoArrayType = AutoArrayType.List)] + public string[] NoCacheFilter { get; set; } + /// <summary> + /// Output destination (format: "type=local,dest=path") + /// </summary> + [AutoProperty(AutoArrayType = AutoArrayType.List)] + public string[] Output { get; set; } + /// <summary> + /// Set target platform for build + /// </summary> + [AutoProperty(AutoArrayType = AutoArrayType.List)] + public string[] Platform { get; set; } + /// <summary> + /// Set type of progress output ("auto", "plain", "tty"). Use plain to show container output (default "auto") + /// </summary> + public string Progress { get; set; } + /// <summary> + /// Always attempt to pull all referenced images + /// </summary> + public bool Pull { get; set; } + /// <summary> + /// Shorthand for "--output=type=registry" + /// </summary> + public bool Push { get; set; } + /// <summary> + /// Suppress the build output and print image ID on success + /// </summary> + public bool Quiet { get; set; } + /// <summary> + /// Remove intermediate containers after a successful build + /// </summary> + [AutoProperty(Format = Constants.BoolWithTrueDefaultFormat)] + public bool? Rm { get; set; } + /// <summary> + /// Secret to expose to the build (format: "id=mysecret[,src=/local/secret]") + /// </summary> + [AutoProperty(AutoArrayType = AutoArrayType.List)] + public string[] Secret { get; set; } + /// <summary> + /// Security options + /// </summary> + [AutoProperty(AutoArrayType = AutoArrayType.List)] + public string[] SecurityOpt { get; set; } + /// <summary> + /// Size of "/dev/shm" + /// </summary> + public string ShmSize { get; set; } + /// <summary> + /// Squash newly built layers into a single new layer + /// </summary> + public bool? Squash { get; set; } + /// <summary> + /// SSH agent socket or keys to expose to the build (format: "default|<id>[=<socket>|<key>[,<key>]]") + /// </summary> + [AutoProperty(AutoArrayType = AutoArrayType.List)] + public string[] Ssh { get; set; } + /// <summary> + /// Name and optionally a tag (format: "name:tag") + /// </summary> + [AutoProperty(AutoArrayType = AutoArrayType.List)] + public string[] Tag { get; set; } + /// <summary> + /// Set the target build stage to build. + /// </summary> + public string Target { get; set; } + /// <summary> + /// Ulimit options (default []) + /// </summary> + [AutoProperty(AutoArrayType = AutoArrayType.List)] + public string[] Ulimit { get; set; } + /// <summary> + /// Set annotation for new image + /// </summary> + [AutoProperty(AutoArrayType = AutoArrayType.List)] + public string[] Annotation { get; set; } +} diff --git a/build/common/Addins/Cake.Docker/DockerBuildXImageToolsCreateSettings.cs b/build/common/Addins/Cake.Docker/DockerBuildXImageToolsCreateSettings.cs new file mode 100644 index 0000000000..7306e7f246 --- /dev/null +++ b/build/common/Addins/Cake.Docker/DockerBuildXImageToolsCreateSettings.cs @@ -0,0 +1,36 @@ +#nullable disable +namespace Common.Addins.Cake.Docker; + +/// <summary> +/// Settings for docker buildx imagetools create. +/// </summary> +public sealed class DockerBuildXImageToolsCreateSettings : AutoToolSettings +{ + /// <summary> + /// Append to existing manifest + /// </summary> + public bool Append { get; set; } + /// <summary> + /// Override the configured builder instance + /// </summary> + public string Builder { get; set; } + /// <summary> + /// Show final image instead of pushing + /// </summary> + public bool DryRun { get; set; } + /// <summary> + /// Read source descriptor from file + /// </summary> + [AutoProperty(AutoArrayType = AutoArrayType.List)] + public string[] File { get; set; } + /// <summary> + /// Set reference for new image + /// </summary> + [AutoProperty(AutoArrayType = AutoArrayType.List)] + public string[] Tag { get; set; } + /// <summary> + /// Set annotation for new image + /// </summary> + [AutoProperty(AutoArrayType = AutoArrayType.List)] + public string[] Annotation { get; set; } +} diff --git a/build/common/Addins/GitVersion/GitVersion.cs b/build/common/Addins/GitVersion/GitVersion.cs index 833cb5c387..a6fd1d1bc1 100644 --- a/build/common/Addins/GitVersion/GitVersion.cs +++ b/build/common/Addins/GitVersion/GitVersion.cs @@ -45,11 +45,6 @@ public sealed class GitVersion /// </summary> public string? BuildMetaData { get; set; } - /// <summary> - /// Gets or sets the build metadata padded. - /// </summary> - public string? BuildMetaDataPadded { get; set; } - /// <summary> /// Gets or sets the major version. /// </summary> @@ -65,16 +60,6 @@ public sealed class GitVersion /// </summary> public string? SemVer { get; set; } - /// <summary> - /// Gets or sets the legacy Semantic Version. - /// </summary> - public string? LegacySemVer { get; set; } - - /// <summary> - /// Gets or sets the padded legacy Semantic Version. - /// </summary> - public string? LegacySemVerPadded { get; set; } - /// <summary> /// Gets or sets the assembly Semantic Version. /// </summary> @@ -105,26 +90,11 @@ public sealed class GitVersion /// </summary> public string? Sha { get; set; } - /// <summary> - /// Gets or sets the NuGet version for v2. - /// </summary> - public string? NuGetVersionV2 { get; set; } - - /// <summary> - /// Gets or sets the NuGet version. - /// </summary> - public string? NuGetVersion { get; set; } - /// <summary> /// Gets or sets the commits since version source. /// </summary> public int? CommitsSinceVersionSource { get; set; } - /// <summary> - /// Gets or sets the commits since version source padded. - /// </summary> - public string? CommitsSinceVersionSourcePadded { get; set; } - /// <summary> /// Gets or sets the commit date. /// </summary> diff --git a/build/common/Addins/GitVersion/GitVersionRunner.cs b/build/common/Addins/GitVersion/GitVersionRunner.cs index 8581c8c283..1143849474 100644 --- a/build/common/Addins/GitVersion/GitVersionRunner.cs +++ b/build/common/Addins/GitVersion/GitVersionRunner.cs @@ -43,7 +43,7 @@ public GitVersion Run(GitVersionSettings settings) output = string.Join("\n", process.GetStandardOutput()); if (log.Verbosity < Verbosity.Diagnostic) { - var errors = Regex.Matches(output, @"( *ERROR:? [^\n]*)\n([^\n]*)").Cast<Match>() + var errors = Regex.Matches(output, @"( *ERROR:? [^\n]*)\n([^\n]*)") .SelectMany(match => new[] { match.Groups[1].Value, match.Groups[2].Value }); foreach (var error in errors) { diff --git a/build/common/Addins/GitVersion/GitVersionSettings.cs b/build/common/Addins/GitVersion/GitVersionSettings.cs index 688a32a34e..db44b1aac3 100644 --- a/build/common/Addins/GitVersion/GitVersionSettings.cs +++ b/build/common/Addins/GitVersion/GitVersionSettings.cs @@ -13,7 +13,7 @@ public sealed class GitVersionSettings : ToolSettings /// <summary> /// Gets or sets the output type. /// </summary> - public HashSet<GitVersionOutput> OutputTypes { get; set; } = new() { GitVersionOutput.Json }; + public HashSet<GitVersionOutput> OutputTypes { get; set; } = [GitVersionOutput.Json]; /// <summary> /// Gets or sets a value indicating whether to update all the AssemblyInfo files. diff --git a/build/common/Lifetime/BuildLifetimeBase.cs b/build/common/Lifetime/BuildLifetimeBase.cs new file mode 100644 index 0000000000..1a7bb3fce6 --- /dev/null +++ b/build/common/Lifetime/BuildLifetimeBase.cs @@ -0,0 +1,84 @@ +using Cake.Incubator.LoggingExtensions; +using Common.Addins.GitVersion; +using Common.Utilities; + +namespace Common.Lifetime; + +public class BuildLifetimeBase<T> : FrostingLifetime<T> where T : BuildContextBase +{ + public override void Setup(T context, ISetupContext info) + { + var buildSystem = context.BuildSystem(); + context.IsLocalBuild = buildSystem.IsLocalBuild; + context.IsAzurePipelineBuild = buildSystem.IsRunningOnAzurePipelines; + context.IsGitHubActionsBuild = buildSystem.IsRunningOnGitHubActions; + + context.IsPullRequest = buildSystem.IsPullRequest; + context.BranchName = context.GetBranchName(); + context.RepositoryName = context.GetRepositoryName(); + context.IsOriginalRepo = context.IsOriginalRepo(); + context.IsMainBranch = context.IsMainBranch(); + context.IsSupportBranch = context.IsSupportBranch(); + context.IsTagged = context.IsTagged(); + + context.IsOnWindows = context.IsRunningOnWindows(); + context.IsOnLinux = context.IsRunningOnLinux(); + context.IsOnMacOS = context.IsRunningOnMacOs(); + + if (info.TargetTask.Name == "BuildPrepare") + { + context.Information("Running BuildPrepare..."); + return; + } + var gitVersionSettings = new GitVersionSettings + { + OutputTypes = [GitVersionOutput.Json, GitVersionOutput.BuildServer], + ToolPath = context.Tools.Resolve(["dotnet.exe", "dotnet"]), + ArgumentCustomization = args => args.Prepend(context.GetGitVersionDotnetToolLocation()?.FullPath ?? throw new FileNotFoundException("Failed to locate the Release build of gitversion.dll in ./tools/gitversion. Try running \"./build.ps1 -Stage build -Target BuildPrepare\"")) + }; + + var gitVersion = context.GitVersion(gitVersionSettings); + + context.Version = BuildVersion.Calculate(gitVersion); + } + public override void Teardown(T context, ITeardownContext info) + { + context.StartGroup("Build Teardown"); + try + { + context.Information("Starting Teardown..."); + + LogBuildInformation(context); + + context.Information("Finished running tasks."); + } + catch (Exception exception) + { + context.Error(exception.Dump()); + } + context.EndGroup(); + } + protected void LogBuildInformation(T context) + { + if (context.HasArgument(Arguments.Target)) + { + context.Information($"Target: {context.Argument<string>(Arguments.Target)}"); + } + if (context.Version is not null) + { + context.Information($"Version: {context.Version.SemVersion}"); + } + context.Information($"Build Agent: {context.GetBuildAgent()}"); + context.Information($"OS: {context.GetOS()}"); + context.Information($"Pull Request: {context.IsPullRequest}"); + context.Information($"Repository Name: {context.RepositoryName}"); + context.Information($"Original Repository: {context.IsOriginalRepo}"); + context.Information($"Branch Name: {context.BranchName}"); + context.Information($"Main Branch: {context.IsMainBranch}"); + context.Information($"Support Branch: {context.IsSupportBranch}"); + context.Information($"Tagged: {context.IsTagged}"); + context.Information($"IsStableRelease: {context.IsStableRelease}"); + context.Information($"IsTaggedPreRelease: {context.IsTaggedPreRelease}"); + context.Information($"IsInternalPreRelease: {context.IsInternalPreRelease}"); + } +} diff --git a/build/common/Utilities/BuildContextBase.cs b/build/common/Utilities/BuildContextBase.cs index ff67d773bc..6dba79bdc1 100644 --- a/build/common/Utilities/BuildContextBase.cs +++ b/build/common/Utilities/BuildContextBase.cs @@ -2,13 +2,12 @@ namespace Common.Utilities; public class BuildContextBase : FrostingContext { - protected BuildContextBase(ICakeContext context) : base(context) - { - } + protected BuildContextBase(ICakeContext context) : base(context) => Platform = Environment.Platform.Family; + public PlatformFamily Platform { get; set; } public BuildVersion? Version { get; set; } - public bool IsOriginalRepo { get; set; } public string BranchName { get; set; } = string.Empty; + public string RepositoryName { get; set; } = string.Empty; public bool IsMainBranch { get; set; } public bool IsSupportBranch { get; set; } public bool IsPullRequest { get; set; } @@ -19,7 +18,8 @@ protected BuildContextBase(ICakeContext context) : base(context) public bool IsOnWindows { get; set; } public bool IsOnLinux { get; set; } public bool IsOnMacOS { get; set; } - public bool IsOnMainOrSupportBranchOriginalRepo => !IsLocalBuild && IsOriginalRepo && (IsMainBranch || IsSupportBranch) && !IsPullRequest; - public bool IsStableRelease => IsOnMainOrSupportBranchOriginalRepo && IsTagged; - public bool IsPreRelease => IsOnMainOrSupportBranchOriginalRepo && !IsTagged; + public bool IsReleaseBranchOriginalRepo => !IsLocalBuild && IsOriginalRepo && (IsMainBranch || IsSupportBranch) && !IsPullRequest; + public bool IsStableRelease => IsReleaseBranchOriginalRepo && IsTagged && Version?.IsPreRelease == false; + public bool IsTaggedPreRelease => IsReleaseBranchOriginalRepo && IsTagged && Version?.IsPreRelease == true; + public bool IsInternalPreRelease => IsReleaseBranchOriginalRepo && IsGitHubActionsBuild; } diff --git a/build/common/Utilities/BuildLifetimeBase.cs b/build/common/Utilities/BuildLifetimeBase.cs deleted file mode 100644 index f117462390..0000000000 --- a/build/common/Utilities/BuildLifetimeBase.cs +++ /dev/null @@ -1,71 +0,0 @@ -using Cake.Incubator.LoggingExtensions; -using Common.Addins.GitVersion; - -namespace Common.Utilities; - -public class BuildLifetimeBase<T> : FrostingLifetime<T> where T : BuildContextBase -{ - public override void Setup(T context) - { - var buildSystem = context.BuildSystem(); - context.IsLocalBuild = buildSystem.IsLocalBuild; - context.IsAzurePipelineBuild = buildSystem.IsRunningOnAzurePipelines; - context.IsGitHubActionsBuild = buildSystem.IsRunningOnGitHubActions; - - context.IsPullRequest = buildSystem.IsPullRequest; - context.BranchName = context.GetBranchName(); - context.IsOriginalRepo = context.IsOriginalRepo(); - context.IsMainBranch = context.IsMainBranch(); - context.IsSupportBranch = context.IsSupportBranch(); - context.IsTagged = context.IsTagged(); - - context.IsOnWindows = context.IsRunningOnWindows(); - context.IsOnLinux = context.IsRunningOnLinux(); - context.IsOnMacOS = context.IsRunningOnMacOs(); - - var gitVersion = context.GitVersion(new GitVersionSettings - { - OutputTypes = new HashSet<GitVersionOutput> { GitVersionOutput.Json, GitVersionOutput.BuildServer } - }); - - context.Version = BuildVersion.Calculate(gitVersion); - } - public override void Teardown(T context, ITeardownContext info) - { - context.StartGroup("Build Teardown"); - try - { - context.Information("Starting Teardown..."); - - context.Information("Pull Request: {0}", context.IsPullRequest); - context.Information("Original Repo: {0}", context.IsOriginalRepo); - context.Information("Branch Name: {0}", context.BranchName); - context.Information("Main Branch: {0}", context.IsMainBranch); - context.Information("Support Branch: {0}", context.IsSupportBranch); - context.Information("Tagged: {0}", context.IsTagged); - - context.Information("Finished running tasks."); - } - catch (Exception exception) - { - context.Error(exception.Dump()); - } - context.EndGroup(); - } - protected void LogBuildInformation(T context) - { - if (context.HasArgument(Arguments.Target)) - { - context.Information("Target: {0}", context.Argument<string>(Arguments.Target)); - } - context.Information("Version: {0}", context.Version?.SemVersion); - context.Information("Build Agent: {0}", context.GetBuildAgent()); - context.Information("OS: {0}", context.GetOS()); - context.Information("Pull Request: {0}", context.IsPullRequest); - context.Information("Original Repo: {0}", context.IsOriginalRepo); - context.Information("Branch Name: {0}", context.BranchName); - context.Information("Main Branch: {0}", context.IsMainBranch); - context.Information("Support Branch: {0}", context.IsSupportBranch); - context.Information("Tagged: {0}", context.IsTagged); - } -} diff --git a/build/common/Utilities/CakeHostExtensions.cs b/build/common/Utilities/CakeHostExtensions.cs index 5b8681122f..43b964c8b1 100644 --- a/build/common/Utilities/CakeHostExtensions.cs +++ b/build/common/Utilities/CakeHostExtensions.cs @@ -12,7 +12,7 @@ public static CakeHost UseRootDirectory(this CakeHost host) public static CakeHost InstallToolsFromRootManifest(this CakeHost host) { - host = host.UseModule<LocalToolsModule>().InstallToolsFromManifest(Extensions.GetRootDirectory().CombineWithFilePath("dotnet-tools.json").FullPath); + host = host.UseModule<LocalToolsModule>().InstallToolsFromManifest(Extensions.GetRootDirectory().CombineWithFilePath(".config/dotnet-tools.json").FullPath); return host; } diff --git a/build/common/Utilities/Constants.cs b/build/common/Utilities/Constants.cs index 18da2c45d0..ec2e56c887 100644 --- a/build/common/Utilities/Constants.cs +++ b/build/common/Utilities/Constants.cs @@ -6,20 +6,14 @@ public class Constants public const string Repository = "GitVersion"; public const string Version60 = "6.0"; - public const string Version50 = "5.0"; - public const string Version31 = "3.1"; + public const string Version80 = "8.0"; + public const string VersionLatest = Version80; - public const string NetVersion50 = "net5.0"; - public const string NetVersion60 = "net6.0"; - public const string CoreFxVersion31 = "netcoreapp3.1"; - public const string FullFxVersion48 = "net48"; + public const string DefaultBranch = "main"; + public const string DefaultConfiguration = "Release"; - public const string NoMono = "NoMono"; - public const string NoNet48 = "NoNet48"; - - public static readonly string[] VersionsToBuild = { Version60, Version50, Version31 }; - public static readonly Architecture[] ArchToBuild = { Architecture.Amd64, Architecture.Arm64 }; - public static readonly string[] DistrosToSkip = { Alpine312, Alpine313, Alpine314, Centos7 }; + public static readonly Architecture[] ArchToBuild = [Architecture.Amd64, Architecture.Arm64]; + public static readonly string[] Frameworks = [Version60, Version80]; public const string DockerBaseImageName = "gittools/build-images"; public const string DockerImageName = "gittools/gitversion"; @@ -32,32 +26,30 @@ public class Constants public const string Arm64 = "arm64"; public const string Amd64 = "amd64"; - public const string Alpine312 = "alpine.3.12"; - public const string Alpine313 = "alpine.3.13"; - public const string Alpine314 = "alpine.3.14"; - public const string Centos7 = "centos.7"; - public const string Centos8 = "centos.8"; - public const string Debian9 = "debian.9"; - public const string Debian10 = "debian.10"; + public const string Alpine317 = "alpine.3.17"; + public const string Alpine318 = "alpine.3.18"; + public const string CentosStream8 = "centos.stream.8"; public const string Debian11 = "debian.11"; - public const string Fedora33 = "fedora.33"; - public const string Ubuntu1804 = "ubuntu.18.04"; + public const string Fedora37 = "fedora.37"; public const string Ubuntu2004 = "ubuntu.20.04"; - public const string DockerDistroLatest = Debian10; + public const string Ubuntu2204 = "ubuntu.22.04"; + public const string Ubuntu2404 = "ubuntu.24.04"; + public const string DockerDistroLatest = Debian11; + public const string DebianLatest = Debian11; + public const string UbuntuLatest = Ubuntu2404; + public const string AlpineLatest = Alpine318; + public static readonly string[] DockerDistrosToBuild = - { - Alpine312, - Alpine313, - Alpine314, - Centos7, - Centos8, - Debian9, - Debian10, + [ + Alpine317, + Alpine318, + CentosStream8, Debian11, - Fedora33, - Ubuntu1804, - Ubuntu2004 - }; + Fedora37, + Ubuntu2004, + Ubuntu2204, + Ubuntu2404 + ]; public const string NugetOrgUrl = "https://api.nuget.org/v3/index.json"; public const string GithubPackagesUrl = "https://nuget.pkg.github.com/gittools/index.json"; public const string ChocolateyUrl = "https://push.chocolatey.org/"; diff --git a/build/common/Utilities/ContextExtensions.cs b/build/common/Utilities/ContextExtensions.cs index 552f01aa84..fc5c564072 100644 --- a/build/common/Utilities/ContextExtensions.cs +++ b/build/common/Utilities/ContextExtensions.cs @@ -1,32 +1,12 @@ -using Cake.Common.Tools.DotNet.Test; -using Cake.Coverlet; -using Common.Addins.Cake.Coverlet; +using System.Runtime.InteropServices; +using Cake.Common.Build.AzurePipelines; using Xunit; +using ProcessArchitecture = System.Runtime.InteropServices.Architecture; namespace Common.Utilities; public static class ContextExtensions { - public static void DotNetTest( - this ICakeContext context, - FilePath project, - DotNetTestSettings settings, - CoverletSettings coverletSettings) - { - if (context == null) - { - throw new ArgumentNullException(nameof(context)); - } - var currentCustomization = settings.ArgumentCustomization; - settings.ArgumentCustomization = (args) => ArgumentsProcessor.ProcessMSBuildArguments( - coverletSettings, - context.Environment, - currentCustomization?.Invoke(args) ?? args, - project); - - context.DotNetTest(project.FullPath, settings); - } - public static IEnumerable<string> ExecuteCommand(this ICakeContext context, FilePath exe, string? args, DirectoryPath? workDir = null) { var processSettings = new ProcessSettings { Arguments = args, RedirectStandardOutput = true }; @@ -34,6 +14,7 @@ public static IEnumerable<string> ExecuteCommand(this ICakeContext context, File { processSettings.WorkingDirectory = workDir; } + context.StartProcess(exe, processSettings, out var redirectedOutput); return redirectedOutput.ToList(); } @@ -52,29 +33,14 @@ public static void GitPushBranch(this ICakeContext context, DirectoryPath reposi public static bool IsOriginalRepo(this ICakeContext context) { - var buildSystem = context.BuildSystem(); - string repositoryName = string.Empty; - if (buildSystem.IsRunningOnAppVeyor) - { - repositoryName = buildSystem.AppVeyor.Environment.Repository.Name; - } - else if (buildSystem.IsRunningOnAzurePipelines) - { - repositoryName = buildSystem.AzurePipelines.Environment.Repository.RepoName; - } - else if (buildSystem.IsRunningOnGitHubActions) - { - repositoryName = buildSystem.GitHubActions.Environment.Workflow.Repository; - } - context.Information("Repository Name: {0}", repositoryName); - + var repositoryName = context.GetRepositoryName(); return !string.IsNullOrWhiteSpace(repositoryName) && StringComparer.OrdinalIgnoreCase.Equals("gittools/GitVersion", repositoryName); } public static bool IsMainBranch(this ICakeContext context) { var repositoryBranch = GetBranchName(context); - return !string.IsNullOrWhiteSpace(repositoryBranch) && StringComparer.OrdinalIgnoreCase.Equals("main", repositoryBranch); + return !string.IsNullOrWhiteSpace(repositoryBranch) && StringComparer.OrdinalIgnoreCase.Equals(Constants.DefaultBranch, repositoryBranch); } public static bool IsSupportBranch(this ICakeContext context) @@ -116,6 +82,12 @@ public static string GetOS(this ICakeContext context) return string.Empty; } + public static bool IsRunningOnAmd64(this ICakeContext _) + => RuntimeInformation.ProcessArchitecture == ProcessArchitecture.X64; + + public static bool IsRunningOnArm64(this ICakeContext _) => + RuntimeInformation.ProcessArchitecture == ProcessArchitecture.Arm64; + public static string GetBuildAgent(this ICakeContext context) { var buildSystem = context.BuildSystem(); @@ -132,30 +104,27 @@ public static string GetBuildAgent(this ICakeContext context) public static void StartGroup(this ICakeContext context, string title) { var buildSystem = context.BuildSystem(); - var startGroup = "[group]"; if (buildSystem.IsRunningOnAzurePipelines) { - startGroup = "##[group]"; + context.AzurePipelines().Commands.StartGroup(context, title); } else if (buildSystem.IsRunningOnGitHubActions) { - startGroup = "::group::"; + context.GitHubActions().Commands.StartGroup(title); } - context.Information($"{startGroup}{title}"); } + public static void EndGroup(this ICakeContext context) { var buildSystem = context.BuildSystem(); - var endgroup = "[endgroup]"; if (buildSystem.IsRunningOnAzurePipelines) { - endgroup = "##[endgroup]"; + context.AzurePipelines().Commands.EndGroup(context); } else if (buildSystem.IsRunningOnGitHubActions) { - endgroup = "::endgroup::"; + context.GitHubActions().Commands.EndGroup(); } - context.Information($"{endgroup}"); } public static bool ShouldRun(this ICakeContext context, bool criteria, string skipMessage) @@ -182,6 +151,39 @@ public static string GetBranchName(this ICakeContext context) { repositoryBranch = buildSystem.GitHubActions.Environment.Workflow.Ref.Replace("refs/heads/", ""); } + return repositoryBranch; } + + public static string GetRepositoryName(this ICakeContext context) + { + var buildSystem = context.BuildSystem(); + string repositoryName = string.Empty; + if (buildSystem.IsRunningOnAppVeyor) + { + repositoryName = buildSystem.AppVeyor.Environment.Repository.Name; + } + else if (buildSystem.IsRunningOnAzurePipelines) + { + repositoryName = buildSystem.AzurePipelines.Environment.Repository.RepoName; + } + else if (buildSystem.IsRunningOnGitHubActions) + { + repositoryName = buildSystem.GitHubActions.Environment.Workflow.Repository; + } + + return repositoryName; + } + + private static void StartGroup(this IAzurePipelinesCommands _, ICakeContext context, string title) => context.Information("##[group]{0}", title); + + private static void EndGroup(this IAzurePipelinesCommands _, ICakeContext context) => context.Information("##[endgroup]"); + + public static FilePath? GetGitVersionToolLocation(this ICakeContext context) => + context.GetFiles($"src/GitVersion.App/bin/{Constants.DefaultConfiguration}/net{Constants.VersionLatest}/gitversion.dll").SingleOrDefault(); + public static FilePath? GetGitVersionDotnetToolLocation(this ICakeContext context) => + context.MakeAbsolute(Paths.Tools.Combine("gitversion").CombineWithFilePath("gitversion.dll")); + + public static FilePath? GetSchemaDotnetToolLocation(this ICakeContext context) => + context.MakeAbsolute(Paths.Tools.Combine("schema").CombineWithFilePath("schema.dll")); } diff --git a/build/common/Utilities/DockerContextExtensions.cs b/build/common/Utilities/DockerContextExtensions.cs index 15a9f82e52..c20e106994 100644 --- a/build/common/Utilities/DockerContextExtensions.cs +++ b/build/common/Utilities/DockerContextExtensions.cs @@ -1,4 +1,6 @@ using Xunit; +using DockerBuildXBuildSettings = Common.Addins.Cake.Docker.DockerBuildXBuildSettings; +using DockerBuildXImageToolsCreateSettings = Common.Addins.Cake.Docker.DockerBuildXImageToolsCreateSettings; namespace Common.Utilities; @@ -7,15 +9,32 @@ public enum Architecture Arm64, Amd64 } + public static class DockerContextExtensions { - public static bool SkipArm64Image(this ICakeContext context, DockerImage dockerImage) + private static readonly string[] Annotations = + [ + "org.opencontainers.image.authors=GitTools Maintainers", + "org.opencontainers.image.vendor=GitTools", + "org.opencontainers.image.licenses=MIT", + "org.opencontainers.image.source=https://github.com/GitTools/GitVersion.git", + "org.opencontainers.image.documentation=https://gitversion.net/docs/usage/docker", + $"org.opencontainers.image.created={DateTime.UtcNow:O}", + ]; + + public static bool SkipImageTesting(this ICakeContext context, DockerImage dockerImage) { - if (dockerImage.Architecture != Architecture.Arm64) return false; - if (!Constants.DistrosToSkip.Contains(dockerImage.Distro)) return false; + var (distro, targetFramework, architecture, _, _) = dockerImage; - context.Information($"Skipping Target: {dockerImage.TargetFramework}, Distro: {dockerImage.Distro}, Arch: {dockerImage.Architecture}"); - return true; + switch (architecture) + { + case Architecture.Amd64: + case Architecture.Arm64 when context.IsRunningOnArm64(): + return false; + default: + context.Information($"Skipping Target: {targetFramework}, Distro: {distro}, Arch: {architecture}"); + return true; + } } public static void DockerBuildImage(this BuildContextBase context, DockerImage dockerImage) @@ -26,74 +45,127 @@ public static void DockerBuildImage(this BuildContextBase context, DockerImage d context.Information($"Building image: {dockerImage}"); - var workDir = Paths.Src.Combine("Docker"); + var workDir = Paths.Build.Combine("docker"); var tags = context.GetDockerTags(dockerImage, arch); var suffix = arch.ToSuffix(); - var platforms = new List<string> { $"linux/{suffix}" }; + var imageSuffix = $"({distro}-{context.Version.NugetVersion}-{targetFramework}-{suffix})"; + var baseNameSuffix = $"{registry}/{Constants.DockerBaseImageName}:{distro}-runtime-{targetFramework}-{suffix}"; + var description = $"org.opencontainers.image.description=GitVersion images {imageSuffix}"; + var baseName = $"org.opencontainers.image.base.name={baseNameSuffix}"; + var version = $"org.opencontainers.image.version={context.Version.NugetVersion}"; + var revision = $"org.opencontainers.image.revision={context.Version.GitVersion.Sha}"; + var source = $"org.opencontainers.image.source=https://github.com/GitTools/GitVersion/blob/{context.Version.GitVersion.Sha}/build/docker/Dockerfile"; - var buildSettings = new DockerImageBuildSettings + var buildSettings = new DockerBuildXBuildSettings { Rm = true, + Pull = true, + // NoCache = true, Tag = tags.ToArray(), + Platform = [$"linux/{suffix}"], + Output = ["type=docker,oci-mediatypes=true"], File = workDir.CombineWithFilePath("Dockerfile").FullPath, - BuildArg = new[] - { - $"contentFolder=/content", + BuildArg = + [ + "nugetFolder=/nuget", $"REGISTRY={registry}", $"DOTNET_VERSION={targetFramework}", $"DISTRO={distro}", $"VERSION={context.Version.NugetVersion}" - }, - Pull = true, - Platform = string.Join(",", platforms), + ], + Label = + [ + "maintainers=GitTools Maintainers", + .. Annotations, + baseName, + version, + source, + revision, + description + ], + Annotation = + [ + .. Annotations, + baseName, + version, + source, + revision, + description + ] }; - context.DockerBuild(buildSettings, workDir.ToString(), "--output type=docker"); + context.DockerBuildXBuild(buildSettings, workDir.ToString()); } - public static void DockerPushImage(this BuildContextBase context, DockerImage dockerImage) + public static void DockerBuildXBuild(this ICakeContext context, DockerBuildXBuildSettings settings, + DirectoryPath target) { - var tags = context.GetDockerTags(dockerImage, dockerImage.Architecture); - foreach (var tag in tags) - { - context.DockerPush(tag); - } + ArgumentNullException.ThrowIfNull(context); + var runner = context.CreateRunner<DockerBuildXBuildSettings>(); + runner.Run("buildx build", settings, [target.ToString().EscapeProcessArgument()]); } - public static void DockerCreateManifest(this BuildContextBase context, DockerImage dockerImage, bool skipArm64Image) + public static void DockerManifest(this BuildContextBase context, DockerImage dockerImage) { var manifestTags = context.GetDockerTags(dockerImage); foreach (var tag in manifestTags) { - var manifestCreateSettings = new DockerManifestCreateSettings { Amend = true }; var amd64Tag = $"{tag}-{Architecture.Amd64.ToSuffix()}"; - if (skipArm64Image) - { - context.DockerManifestCreate(manifestCreateSettings, tag, amd64Tag); - } - else - { - var arm64Tag = $"{tag}-{Architecture.Arm64.ToSuffix()}"; - context.DockerManifestCreate(manifestCreateSettings, tag, amd64Tag, arm64Tag); - } + var arm64Tag = $"{tag}-{Architecture.Arm64.ToSuffix()}"; + + var settings = GetManifestSettings(dockerImage, context.Version!, tag); + context.DockerBuildXImageToolsCreate(settings, [amd64Tag, arm64Tag]); } } - public static void DockerPushManifest(this BuildContextBase context, DockerImage dockerImage) + public static void DockerBuildXImageToolsCreate(this ICakeContext context, + DockerBuildXImageToolsCreateSettings settings, + IEnumerable<string>? target = null) { - var manifestTags = context.GetDockerTags(dockerImage); - foreach (var tag in manifestTags) + ArgumentNullException.ThrowIfNull(context); + var runner = context.CreateRunner<DockerBuildXImageToolsCreateSettings>(); + runner.Run("buildx imagetools create", settings, target?.ToArray() ?? []); + } + + private static GenericDockerRunner<TSettings> CreateRunner<TSettings>(this ICakeContext context) + where TSettings : AutoToolSettings, new() => + new(context.FileSystem, context.Environment, context.ProcessRunner, context.Tools); + + public static void DockerPushImage(this BuildContextBase context, DockerImage dockerImage) + { + var tags = context.GetDockerTags(dockerImage, dockerImage.Architecture); + foreach (var tag in tags) { - context.DockerManifestPush(new DockerManifestPushSettings { Purge = true }, tag); + context.DockerPush(tag); } } + public static DockerBuildXImageToolsCreateSettings GetManifestSettings(DockerImage dockerImage, BuildVersion buildVersion, string tag) + { + var imageSuffix = $"({dockerImage.Distro}-{buildVersion.NugetVersion}-{dockerImage.TargetFramework})"; + var description = $"org.opencontainers.image.description=GitVersion images {imageSuffix}"; + var version = $"org.opencontainers.image.version={buildVersion.NugetVersion}"; + var revision = $"org.opencontainers.image.revision={buildVersion.GitVersion.Sha}"; + var settings = new DockerBuildXImageToolsCreateSettings + { + Tag = [tag], + Annotation = + [ + .. Annotations.Select(a => "index:" + a).ToArray(), + $"index:{description}", + $"index:{version}", + $"index:{revision}" + ] + }; + return settings; + } + public static void DockerPullImage(this ICakeContext context, DockerImage dockerImage) { var tag = $"{dockerImage.DockerImageName()}:{dockerImage.Distro}-sdk-{dockerImage.TargetFramework}"; var platform = $"linux/{dockerImage.Architecture.ToString().ToLower()}"; - context.DockerPull(new DockerImagePullSettings { Platform = platform }, tag); + context.DockerPull(new() { Platform = platform }, tag); } public static void DockerTestImage(this BuildContextBase context, DockerImage dockerImage) @@ -101,7 +173,7 @@ public static void DockerTestImage(this BuildContextBase context, DockerImage do var tags = context.GetDockerTags(dockerImage, dockerImage.Architecture); foreach (var tag in tags) { - context.DockerTestRun(tag, dockerImage.Architecture, "/repo", "/showvariable", "FullSemver"); + context.DockerTestRun(tag, dockerImage.Architecture, "/repo", "/showvariable", "FullSemver", "/nocache"); } } @@ -111,73 +183,46 @@ public static void DockerTestArtifact(this BuildContextBase context, DockerImage context.DockerTestRun(tag, dockerImage.Architecture, "sh", cmd); } - private static void DockerBuild( - this ICakeContext context, - DockerImageBuildSettings settings, - string path, params string[] args) - { - GenericDockerRunner<DockerImageBuildSettings> genericDockerRunner = - new(context.FileSystem, context.Environment, context.ProcessRunner, context.Tools); - - string str; - switch (string.IsNullOrEmpty(path)) - { - case false: - { - string str2 = path.Trim(); - str = str2.Length <= 1 || !str2.StartsWith("\"") || !str2.EndsWith("\"") ? "\"" + path + "\"" : path; - break; - } - default: - str = path; - break; - } - var additional = args.Concat(new[] { str }).ToArray(); - genericDockerRunner.Run("buildx build", settings, additional); - } - - private static void DockerTestRun(this BuildContextBase context, string image, Architecture arch, string command, params string[] args) + private static void DockerTestRun(this BuildContextBase context, string image, Architecture arch, string command, + params string[] args) { var settings = GetDockerRunSettings(context, arch); context.Information($"Testing image: {image}"); - var output = context.DockerRunImage(settings, image, command, args); + var output = context.DockerRun(settings, image, command, args); context.Information("Output : " + output); - Assert.Contains(context.Version?.GitVersion.FullSemVer, output); + Assert.NotNull(context.Version?.GitVersion); + Assert.Contains(context.Version.GitVersion.FullSemVer!, output); } - private static IEnumerable<string> GetDockerTags(this BuildContextBase context, DockerImage dockerImage, Architecture? arch = null) + + private static IEnumerable<string> GetDockerTags(this BuildContextBase context, DockerImage dockerImage, + Architecture? arch = null) { var name = dockerImage.DockerImageName(); var distro = dockerImage.Distro; var targetFramework = dockerImage.TargetFramework; - if (context.Version == null) return Enumerable.Empty<string>(); + if (context.Version == null) return []; var tags = new List<string> { $"{name}:{context.Version.Version}-{distro}-{targetFramework}", $"{name}:{context.Version.SemVersion}-{distro}-{targetFramework}", }; - if (distro == Constants.DockerDistroLatest && targetFramework == Constants.Version50) + if (distro == Constants.DockerDistroLatest && targetFramework == Constants.VersionLatest) { - tags.AddRange(new[] - { - $"{name}:{context.Version.Version}", - $"{name}:{context.Version.SemVersion}", - - $"{name}:{context.Version.Version}-{distro}", - $"{name}:{context.Version.SemVersion}-{distro}" - }); + tags.Add($"{name}:{context.Version.SemVersion}"); if (context.IsStableRelease) { - tags.AddRange(new[] - { + tags.AddRange( + [ + $"{name}:{context.Version.Version}", $"{name}:latest", $"{name}:latest-{targetFramework}", $"{name}:latest-{distro}", $"{name}:latest-{distro}-{targetFramework}", - }); + ]); } } @@ -185,9 +230,11 @@ private static IEnumerable<string> GetDockerTags(this BuildContextBase context, var suffix = arch.Value.ToSuffix(); return tags.Select(x => $"{x}-{suffix}").Distinct(); - } - private static string DockerImageName(this DockerImage image) => $"{image.Registry}/{(image.UseBaseImage ? Constants.DockerBaseImageName : Constants.DockerImageName)}"; + + private static string DockerImageName(this DockerImage image) => + $"{image.Registry}/{(image.UseBaseImage ? Constants.DockerBaseImageName : Constants.DockerImageName)}"; + private static DockerContainerRunSettings GetDockerRunSettings(this BuildContextBase context, Architecture arch) { var currentDir = context.MakeAbsolute(context.Directory(".")); @@ -195,56 +242,34 @@ private static DockerContainerRunSettings GetDockerRunSettings(this BuildContext var settings = new DockerContainerRunSettings { Rm = true, - Volume = new[] - { + Volume = + [ $"{currentDir}:{root}/repo", $"{currentDir}/tests/scripts:{root}/scripts", $"{currentDir}/artifacts/packages/nuget:{root}/nuget", - $"{currentDir}/artifacts/packages/native:{root}/native", - }, + $"{currentDir}/artifacts/packages/native:{root}/native" + ], Platform = $"linux/{arch.ToString().ToLower()}" }; if (context.IsAzurePipelineBuild) { - settings.Env = new[] - { + settings.Env = + [ "TF_BUILD=true", $"BUILD_SOURCEBRANCH={context.EnvironmentVariable("BUILD_SOURCEBRANCH")}" - }; + ]; } + if (context.IsGitHubActionsBuild) { - settings.Env = new[] - { + settings.Env = + [ "GITHUB_ACTIONS=true", $"GITHUB_REF={context.EnvironmentVariable("GITHUB_REF")}" - }; + ]; } return settings; } - private static string DockerRunImage(this ICakeContext context, DockerContainerRunSettings settings, string image, string command, params string[] args) - { - if (string.IsNullOrEmpty(image)) - { - throw new ArgumentNullException(nameof(image)); - } - var runner = new GenericDockerRunner<DockerContainerRunSettings>(context.FileSystem, context.Environment, context.ProcessRunner, context.Tools); - List<string> arguments = new() - { - image - }; - if (!string.IsNullOrEmpty(command)) - { - arguments.Add(command); - if (args.Length > 0) - { - arguments.AddRange(args); - } - } - - var result = runner.RunWithResult("run", settings, r => r.ToArray(), arguments.ToArray()); - return string.Join("\n", result); - } } diff --git a/build/common/Utilities/Extensions.cs b/build/common/Utilities/Extensions.cs index a4e10948dc..1c0dde261f 100644 --- a/build/common/Utilities/Extensions.cs +++ b/build/common/Utilities/Extensions.cs @@ -2,6 +2,9 @@ namespace Common.Utilities; public static class Extensions { + private static readonly char[] CharsThatRequireQuoting = [' ', '"']; + private static readonly char[] CharsThatRequireEscaping = ['\\', '"']; + public static IEnumerable<Type> FindAllDerivedTypes(this Assembly assembly, Type baseType) => from type in assembly.GetExportedTypes() let info = type.GetTypeInfo() @@ -38,7 +41,7 @@ public static string GetTaskArguments(this Type task) } var attributes = task.GetCustomAttributes<TaskArgumentAttribute>().ToArray(); - if (attributes.Any()) + if (attributes.Length != 0) { var arguments = attributes.Select(attribute => $"[--{attribute.Name} ({string.Join(" | ", attribute.PossibleValues)})]"); return string.Join(" ", arguments); @@ -60,4 +63,54 @@ public static DirectoryPath GetRootDirectory() } public static string ToSuffix(this Architecture arch) => arch.ToString().ToLower(); + + /// <summary> + /// Escapes arbitrary values so that the process receives the exact string you intend and injection is impossible. + /// Spec: https://msdn.microsoft.com/en-us/library/bb776391.aspx + /// </summary> + public static string EscapeProcessArgument(this string literalValue, bool alwaysQuote = false) + { + if (string.IsNullOrEmpty(literalValue)) return "\"\""; + + if (literalValue.IndexOfAny(CharsThatRequireQuoting) == -1) // Happy path + { + if (!alwaysQuote) return literalValue; + if (literalValue[^1] != '\\') return "\"" + literalValue + "\""; + } + + var sb = new StringBuilder(literalValue.Length + 8).Append('"'); + + var nextPosition = 0; + while (true) + { + var nextEscapeChar = literalValue.IndexOfAny(CharsThatRequireEscaping, nextPosition); + if (nextEscapeChar == -1) break; + + sb.Append(literalValue, nextPosition, nextEscapeChar - nextPosition); + nextPosition = nextEscapeChar + 1; + + switch (literalValue[nextEscapeChar]) + { + case '"': + sb.Append("\\\""); + break; + case '\\': + var numBackslashes = 1; + while (nextPosition < literalValue.Length && literalValue[nextPosition] == '\\') + { + numBackslashes++; + nextPosition++; + } + if (nextPosition == literalValue.Length || literalValue[nextPosition] == '"') + numBackslashes <<= 1; + + for (; numBackslashes != 0; numBackslashes--) + sb.Append('\\'); + break; + } + } + + sb.Append(literalValue, nextPosition, literalValue.Length - nextPosition).Append('"'); + return sb.ToString(); + } } diff --git a/build/common/Utilities/Models.cs b/build/common/Utilities/Models.cs index 3811de6b29..a90d493e16 100644 --- a/build/common/Utilities/Models.cs +++ b/build/common/Utilities/Models.cs @@ -1,3 +1,4 @@ +using Cake.Incubator.AssertExtensions; using Common.Addins.GitVersion; namespace Common.Utilities; @@ -10,28 +11,43 @@ public record GitHubCredentials(string Token, string? UserName = null); public record NugetCredentials(string ApiKey); +public record DockerHubCredentials(string Username, string Password); + public record ChocolateyCredentials(string ApiKey); -public record BuildVersion(GitVersion GitVersion, string? Version, string? Milestone, string? SemVersion, string? NugetVersion) +public record BuildVersion(GitVersion GitVersion, string? Version, string? Milestone, string? SemVersion, string? NugetVersion, string? ChocolateyVersion, bool IsPreRelease) { public static BuildVersion Calculate(GitVersion gitVersion) { var version = gitVersion.MajorMinorPatch; - var semVersion = gitVersion.LegacySemVer; - var nugetVersion = gitVersion.LegacySemVer; + var semVersion = gitVersion.SemVer; + var nugetVersion = gitVersion.SemVer; + var chocolateyVersion = gitVersion.MajorMinorPatch; + + if (!string.IsNullOrWhiteSpace(gitVersion.PreReleaseTag)) + { + // Chocolatey does not support pre-release tags with dots, so we replace them with dashes + // if the pre-release tag is a number, we add a "a" prefix to the pre-release tag + // the trick should be removed when Chocolatey supports semver 2.0 + var prefix = int.TryParse(gitVersion.PreReleaseLabel, out _) ? "a" : string.Empty; + chocolateyVersion += $"-{prefix}{gitVersion.PreReleaseTag?.Replace(".", "-")}"; + } if (!string.IsNullOrWhiteSpace(gitVersion.BuildMetaData)) { semVersion += $"-{gitVersion.BuildMetaData}"; + chocolateyVersion += $"-{gitVersion.BuildMetaData}"; nugetVersion += $".{gitVersion.BuildMetaData}"; } - return new BuildVersion( + return new( GitVersion: gitVersion, Version: version, - Milestone: version, + Milestone: semVersion, SemVersion: semVersion, - NugetVersion: nugetVersion?.ToLowerInvariant() + NugetVersion: nugetVersion?.ToLowerInvariant(), + ChocolateyVersion: chocolateyVersion?.ToLowerInvariant(), + IsPreRelease: !gitVersion.PreReleaseLabel.IsNullOrEmpty() ); } } diff --git a/build/common/Utilities/Paths.cs b/build/common/Utilities/Paths.cs index b3e366e76f..311512578c 100644 --- a/build/common/Utilities/Paths.cs +++ b/build/common/Utilities/Paths.cs @@ -8,16 +8,15 @@ public class Paths public static readonly DirectoryPath Src = Root.Combine("src"); public static readonly DirectoryPath Docs = Root.Combine("docs"); public static readonly DirectoryPath Build = Root.Combine("build"); + public static readonly DirectoryPath Schemas = Root.Combine("schemas"); + public static readonly DirectoryPath Tools = Root.Combine("tools"); public static readonly DirectoryPath Integration = Root.Combine("tests").Combine("integration"); - public static readonly DirectoryPath Nuspec = Build.Combine("nuspec"); - public static readonly DirectoryPath TestOutput = Artifacts.Combine("test-results"); public static readonly DirectoryPath Packages = Artifacts.Combine("packages"); public static readonly DirectoryPath ArtifactsDocs = Artifacts.Combine("docs"); public static readonly DirectoryPath Native = Packages.Combine("native"); public static readonly DirectoryPath Nuget = Packages.Combine("nuget"); - public static readonly DirectoryPath ArtifactsBinCmdline = Packages.Combine("prepare").Combine("cmdline"); public static readonly DirectoryPath ArtifactsBinPortable = Packages.Combine("prepare").Combine("portable"); } diff --git a/build/common/Utilities/TaskArgumentsAttribute.cs b/build/common/Utilities/TaskArgumentsAttribute.cs index 97da6a2c9c..54a618c953 100644 --- a/build/common/Utilities/TaskArgumentsAttribute.cs +++ b/build/common/Utilities/TaskArgumentsAttribute.cs @@ -5,13 +5,8 @@ namespace Common.Utilities; /// </summary> /// <seealso cref="Attribute" /> [AttributeUsage(AttributeTargets.Class, Inherited = false, AllowMultiple = true)] -public class TaskArgumentAttribute : Attribute +public class TaskArgumentAttribute(string name, params string[] possibleValues) : Attribute { - public string Name { get; set; } - public string[] PossibleValues { get; set; } - public TaskArgumentAttribute(string name, params string[] possibleValues) - { - Name = name; - PossibleValues = possibleValues; - } + public string Name { get; } = name; + public string[] PossibleValues { get; } = possibleValues; } diff --git a/build/common/Utilities/Tools.cs b/build/common/Utilities/Tools.cs index 62ea1268b1..f6bbbbf68f 100644 --- a/build/common/Utilities/Tools.cs +++ b/build/common/Utilities/Tools.cs @@ -2,10 +2,10 @@ namespace Common.Utilities; public class Tools { - public const string NugetCmd = "NuGet.CommandLine"; + public const string CodecovUploaderCmd = "CodecovUploader"; public static readonly Dictionary<string, string> Versions = new() { - { NugetCmd, "6.1.0" }, + { CodecovUploaderCmd, "0.7.3" }, }; } diff --git a/build/common/common.csproj b/build/common/common.csproj index e9da2e2d31..37e57f80fc 100644 --- a/build/common/common.csproj +++ b/build/common/common.csproj @@ -6,8 +6,8 @@ </PropertyGroup> <ItemGroup> - <PackageReference Include="Cake.Coverlet" Version="2.5.4" /> - <PackageReference Include="xunit.assert" Version="2.4.1" /> + <PackageReference Include="Cake.Coverlet" /> + <PackageReference Include="xunit.assert" /> </ItemGroup> </Project> diff --git a/build/docker/BuildContext.cs b/build/docker/BuildContext.cs index df8ba0067a..232325c31b 100644 --- a/build/docker/BuildContext.cs +++ b/build/docker/BuildContext.cs @@ -1,15 +1,14 @@ using Common.Utilities; +using Docker.Utilities; namespace Docker; -public class BuildContext : BuildContextBase +public class BuildContext(ICakeContext context) : BuildContextBase(context) { + public Credentials? Credentials { get; set; } public bool IsDockerOnLinux { get; set; } public IEnumerable<DockerImage> Images { get; set; } = new List<DockerImage>(); public DockerRegistry DockerRegistry { get; set; } - - public BuildContext(ICakeContext context) : base(context) - { - } + public ICollection<Architecture> Architectures { get; set; } = new List<Architecture>(); } diff --git a/build/docker/BuildLifetime.cs b/build/docker/BuildLifetime.cs index d5703a06f9..b0bec9d053 100644 --- a/build/docker/BuildLifetime.cs +++ b/build/docker/BuildLifetime.cs @@ -1,37 +1,44 @@ +using Common.Lifetime; using Common.Utilities; +using Docker.Utilities; namespace Docker; public class BuildLifetime : BuildLifetimeBase<BuildContext> { - 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.IsDockerOnLinux = context.DockerCustomCommand("info --format '{{.OSType}}'").First().Replace("'", "") == "linux"; - var architecture = context.HasArgument(Arguments.Architecture) ? context.Argument<Architecture>(Arguments.Architecture) : (Architecture?)null; var dockerRegistry = context.Argument(Arguments.DockerRegistry, DockerRegistry.DockerHub); var dotnetVersion = context.Argument(Arguments.DockerDotnetVersion, string.Empty).ToLower(); var dockerDistro = context.Argument(Arguments.DockerDistro, string.Empty).ToLower(); - var versions = string.IsNullOrWhiteSpace(dotnetVersion) ? Constants.VersionsToBuild : new[] { dotnetVersion }; - var distros = string.IsNullOrWhiteSpace(dockerDistro) ? Constants.DockerDistrosToBuild : new[] { dockerDistro }; - var archs = architecture.HasValue ? new[] { architecture.Value } : Constants.ArchToBuild; + var versions = string.IsNullOrWhiteSpace(dotnetVersion) ? Constants.Frameworks : [dotnetVersion]; + var distros = string.IsNullOrWhiteSpace(dockerDistro) ? Constants.DockerDistrosToBuild : [dockerDistro]; + + var architectures = context.HasArgument(Arguments.Architecture) ? context.Arguments<Architecture>(Arguments.Architecture) : Constants.ArchToBuild; + var platformArch = context.IsRunningOnAmd64() ? Architecture.Amd64 : Architecture.Arm64; var registry = dockerRegistry == DockerRegistry.DockerHub ? Constants.DockerHubRegistry : Constants.GitHubContainerRegistry; + context.DockerRegistry = dockerRegistry; + context.Architectures = architectures; context.Images = from version in versions from distro in distros - from arch in archs + from arch in architectures select new DockerImage(distro, version, arch, registry, false); context.StartGroup("Build Setup"); LogBuildInformation(context); - context.Information("IsDockerOnLinux: {0}", context.IsDockerOnLinux); - context.Information($"Building for Version: {dotnetVersion}, Distro: {dockerDistro}"); + context.Information($"IsDockerOnLinux: {context.IsDockerOnLinux}"); + context.Information($"Building for Version: {dotnetVersion}, Distro: {dockerDistro}, Architecture: {platformArch}"); context.EndGroup(); } } diff --git a/src/Docker/Dockerfile b/build/docker/Dockerfile similarity index 68% rename from src/Docker/Dockerfile rename to build/docker/Dockerfile index ab0b41c847..da8fb898f2 100644 --- a/src/Docker/Dockerfile +++ b/build/docker/Dockerfile @@ -1,19 +1,20 @@ ARG REGISTRY='docker.io' -ARG DISTRO='debian-9' -ARG DOTNET_VERSION='3.1' -ARG VERSION='5.5.1' +ARG DISTRO='debian.11' +ARG DOTNET_VERSION='8.0' +ARG VERSION='5.12.0' FROM $REGISTRY/gittools/build-images:$DISTRO-sdk-$DOTNET_VERSION as installer -ARG contentFolder +ARG nugetFolder ARG VERSION -WORKDIR /app -COPY $contentFolder/ ./ +WORKDIR /nuget +COPY $nugetFolder/ ./ RUN dotnet tool install GitVersion.Tool --version $VERSION --tool-path /tools --add-source . FROM $REGISTRY/gittools/build-images:$DISTRO-runtime-$DOTNET_VERSION WORKDIR /tools COPY --from=installer /tools . +RUN git config --global --add safe.directory '*' ENTRYPOINT ["/tools/dotnet-gitversion"] diff --git a/build/docker/Program.cs b/build/docker/Program.cs index bf96d1c410..829e813ba4 100644 --- a/build/docker/Program.cs +++ b/build/docker/Program.cs @@ -7,5 +7,4 @@ .UseLifetime<BuildLifetime>() .UseTaskLifetime<BuildTaskLifetime>() .UseRootDirectory() - .InstallToolsFromRootManifest() .Run(args); diff --git a/build/docker/Tasks/Default.cs b/build/docker/Tasks/Default.cs index 57deb33a47..c414fa6931 100644 --- a/build/docker/Tasks/Default.cs +++ b/build/docker/Tasks/Default.cs @@ -1,6 +1,4 @@ namespace Docker.Tasks; [TaskDescription("Shows this output")] -public class Default : Common.Tasks.Default -{ -} +public class Default : Common.Tasks.Default; diff --git a/build/docker/Tasks/DockerBuild.cs b/build/docker/Tasks/DockerBuild.cs index d4a486fb09..cef78c2f3f 100644 --- a/build/docker/Tasks/DockerBuild.cs +++ b/build/docker/Tasks/DockerBuild.cs @@ -5,8 +5,8 @@ namespace Docker.Tasks; [TaskName(nameof(DockerBuild))] [TaskDescription("Build the docker images containing the GitVersion Tool")] [TaskArgument(Arguments.DockerRegistry, Constants.DockerHub, Constants.GitHub)] -[TaskArgument(Arguments.DockerDotnetVersion, Constants.Version50, Constants.Version60, Constants.Version31)] -[TaskArgument(Arguments.DockerDistro, Constants.Alpine312, Constants.Debian10, Constants.Ubuntu2004)] +[TaskArgument(Arguments.DockerDotnetVersion, Constants.Version60, Constants.Version80)] +[TaskArgument(Arguments.DockerDistro, Constants.AlpineLatest, Constants.DebianLatest, Constants.UbuntuLatest)] [TaskArgument(Arguments.Architecture, Constants.Amd64, Constants.Arm64)] public class DockerBuild : FrostingTask<BuildContext> { @@ -21,13 +21,12 @@ public override bool ShouldRun(BuildContext context) public override void Run(BuildContext context) { var tool = Paths.Nuget.CombineWithFilePath("GitVersion.Tool*"); - var dest = Paths.Src.Combine("Docker").Combine("content"); + var dest = Paths.Build.Combine("docker").Combine("nuget"); context.EnsureDirectoryExists(dest); context.CopyFiles(tool.FullPath, dest); foreach (var dockerImage in context.Images) { - if (context.SkipArm64Image(dockerImage)) continue; context.DockerBuildImage(dockerImage); } } diff --git a/build/docker/Tasks/DockerHubReadmePublish.cs b/build/docker/Tasks/DockerHubReadmePublish.cs new file mode 100644 index 0000000000..f9e1531fd9 --- /dev/null +++ b/build/docker/Tasks/DockerHubReadmePublish.cs @@ -0,0 +1,129 @@ +using Cake.Http; +using Cake.Json; +using Common.Utilities; + +namespace Docker.Tasks; + +[TaskName(nameof(DockerHubReadmePublish))] +[IsDependentOn(typeof(DockerHubReadmePublishInternal))] +[TaskDescription("Publish the DockerHub updated README.md")] +public class DockerHubReadmePublish : FrostingTask<BuildContext>; +[TaskName(nameof(DockerHubReadmePublishInternal))] +[TaskDescription("Publish the DockerHub updated README.md")] +public class DockerHubReadmePublishInternal : FrostingTask<BuildContext> +{ + public override bool ShouldRun(BuildContext context) + { + var shouldRun = false; + if (context.DockerRegistry == DockerRegistry.DockerHub) + { + shouldRun &= context.ShouldRun(context.IsStableRelease, $"{nameof(DockerHubReadmePublish)} works only for tagged releases."); + } + + return shouldRun; + } + + public override void Run(BuildContext context) + { + var readme = GetReadmeContent(context); + + var response = context.HttpPost("https://hub.docker.com/v2/users/login", settings => + { + var credentials = context.Credentials!.DockerHub!; + settings + .SetContentType("application/json") + .SetJsonRequestBody(new { username = credentials.Username, password = credentials.Password }); + }); + + + context.HttpPatch("https://hub.docker.com/v2/repositories/gittools/gitversion", settings => + { + var token = context.ParseJson(response).Value<string>("token"); + settings + .SetContentType("application/json") + .SetAuthorization("JWT", token) + .SetJsonRequestBody(new { full_description = readme }); + }); + } + + private static string GetReadmeContent(BuildContextBase context) + { + var version = context.Version!.GitVersion.MajorMinorPatch; + const string distro = Constants.AlpineLatest; + const string dotnetVersion = Constants.VersionLatest; + var tag = $"{version}-{distro}-{dotnetVersion}"; + // language=markdown + var readme = $""" +# GitVersion + +![GitVersion – From git log to SemVer in no time][banner] + +Versioning when using Git, solved. GitVersion looks at your git history and works out the [Semantic Version][semver] of the commit being built. + +This repository contains the Docker images for [GitVersion][website]. Source code can be found at [src](https://github.com/GitTools/GitVersion) + +## Usage + +The recommended image to run is `alpine`, as they are the smallest Docker images we provide. This will execute GitVersion for the current working directory (`$(pwd)`) on Linux and Unix or powershell on Windows: + +```sh +docker run --rm -v "$(pwd):/repo" gittools/gitversion:{tag} /repo +``` + +The following command will execute GitVersion for the current working directory (`%CD%`) on Windows with CMD: + +```sh +docker run --rm -v "%CD%:/repo" gittools/gitversion:{tag} /repo +``` + +Note that the path `/repo` needs to be passed as an argument since the `gitversion` executable within the container is not aware of the fact that it's running inside a container. + +### CI Agents + +If you are running GitVersion on a CI agent, you may need to specify environment variables to allow GitVersion to work correctly. +For example, on Azure DevOps you may need to set the following environment variables: + +```sh +docker run --rm -v "$(pwd):/repo" --env TF_BUILD=true --env BUILD_SOURCEBRANCH=$(Build.SourceBranch) gittools/gitversion:{tag} /repo +``` + +On GitHub Actions, you may need to set the following environment variables: + +```sh +docker run --rm -v "$(pwd):/repo" --env GITHUB_ACTIONS=true --env GITHUB_REF=$(GITHUB_REF) gittools/gitversion:{tag} /repo +``` + +### Tags + +Most of the tags we provide have both arm64 and amd64 variants. If you need to pull a architecture specific tag you can do that like: + +```sh +docker run --rm -v "$(pwd):/repo" gittools/gitversion:{tag}-amd64 /repo +docker run --rm -v "$(pwd):/repo" gittools/gitversion:{tag}-arm64 /repo +``` + +## Quick Links + +* [Documentation][docs] +* [Contributing][contribute] +* [Why GitVersion][why] +* [Usage][usage] +* [How it works][how] +* [FAQ][faq] +* [Who is using GitVersion][who] + +[website]: https://gitversion.net +[docs]: https://gitversion.net/docs/ +[contribute]: https://github.com/GitTools/GitVersion/blob/main/CONTRIBUTING.md +[why]: https://gitversion.net/docs/learn/why +[usage]: https://gitversion.net/docs/usage +[how]: https://gitversion.net/docs/learn/how-it-works +[faq]: https://gitversion.net/docs/learn/faq +[who]: https://gitversion.net/docs/learn/who +[src]: https://github.com/GitTools/GitVersion +[semver]: https://semver.org +[banner]: https://raw.githubusercontent.com/GitTools/graphics/master/GitVersion/banner-1280x640.png +"""; + return readme; + } +} diff --git a/build/docker/Tasks/DockerManifest.cs b/build/docker/Tasks/DockerManifest.cs index efc7b9171c..afa1f5fccf 100644 --- a/build/docker/Tasks/DockerManifest.cs +++ b/build/docker/Tasks/DockerManifest.cs @@ -5,8 +5,8 @@ namespace Docker.Tasks; [TaskName(nameof(DockerManifest))] [TaskDescription("Publish the docker manifest containing the images for amd64 and arm64")] [TaskArgument(Arguments.DockerRegistry, Constants.DockerHub, Constants.GitHub)] -[TaskArgument(Arguments.DockerDotnetVersion, Constants.Version50, Constants.Version60, Constants.Version31)] -[TaskArgument(Arguments.DockerDistro, Constants.Alpine312, Constants.Debian10, Constants.Ubuntu2004)] +[TaskArgument(Arguments.DockerDotnetVersion, Constants.Version60, Constants.Version80)] +[TaskArgument(Arguments.DockerDistro, Constants.AlpineLatest, Constants.DebianLatest, Constants.UbuntuLatest)] [IsDependentOn(typeof(DockerManifestInternal))] public class DockerManifest : FrostingTask<BuildContext> { @@ -30,11 +30,11 @@ public override bool ShouldRun(BuildContext context) if (context.DockerRegistry == DockerRegistry.GitHub) { - shouldRun &= context.ShouldRun(context.IsStableRelease || context.IsPreRelease, $"{nameof(DockerPublish)} to GitHub Package Registry works only for releases."); + shouldRun &= context.ShouldRun(context.IsInternalPreRelease, $"{nameof(DockerPublish)} to GitHub Package Registry works only internal releases."); } if (context.DockerRegistry == DockerRegistry.DockerHub) { - shouldRun &= context.ShouldRun(context.IsStableRelease, $"{nameof(DockerPublish)} DockerHub works only for tagged releases."); + shouldRun &= context.ShouldRun(context.IsStableRelease || context.IsTaggedPreRelease, $"{nameof(DockerPublish)} to DockerHub works only for tagged releases."); } return shouldRun; @@ -44,10 +44,8 @@ public override void Run(BuildContext context) { foreach (var group in context.Images.GroupBy(x => new { x.Distro, x.TargetFramework })) { - var amd64DockerImage = group.First(x => x.Architecture == Architecture.Amd64); - var arm64DockerImage = group.First(x => x.Architecture == Architecture.Arm64); - context.DockerCreateManifest(amd64DockerImage, context.SkipArm64Image(arm64DockerImage)); - context.DockerPushManifest(amd64DockerImage); + var dockerImage = group.First(); + context.DockerManifest(dockerImage); } } } diff --git a/build/docker/Tasks/DockerPublish.cs b/build/docker/Tasks/DockerPublish.cs index a065f81729..51ceec0f9b 100644 --- a/build/docker/Tasks/DockerPublish.cs +++ b/build/docker/Tasks/DockerPublish.cs @@ -5,8 +5,8 @@ namespace Docker.Tasks; [TaskName(nameof(DockerPublish))] [TaskDescription("Publish the docker images containing the GitVersion Tool")] [TaskArgument(Arguments.DockerRegistry, Constants.DockerHub, Constants.GitHub)] -[TaskArgument(Arguments.DockerDotnetVersion, Constants.Version50, Constants.Version60, Constants.Version31)] -[TaskArgument(Arguments.DockerDistro, Constants.Alpine312, Constants.Debian10, Constants.Ubuntu2004)] +[TaskArgument(Arguments.DockerDotnetVersion, Constants.Version60, Constants.Version80)] +[TaskArgument(Arguments.DockerDistro, Constants.AlpineLatest, Constants.DebianLatest, Constants.UbuntuLatest)] [TaskArgument(Arguments.Architecture, Constants.Amd64, Constants.Arm64)] [IsDependentOn(typeof(DockerPublishInternal))] public class DockerPublish : FrostingTask<BuildContext> @@ -31,11 +31,11 @@ public override bool ShouldRun(BuildContext context) shouldRun &= context.ShouldRun(context.IsDockerOnLinux, $"{nameof(DockerPublish)} works only on Docker on Linux agents."); if (context.DockerRegistry == DockerRegistry.GitHub) { - shouldRun &= context.ShouldRun(context.IsStableRelease || context.IsPreRelease, $"{nameof(DockerPublish)} to GitHub Package Registry works only for releases."); + shouldRun &= context.ShouldRun(context.IsInternalPreRelease, $"{nameof(DockerPublish)} to GitHub Package Registry works only for internal releases."); } if (context.DockerRegistry == DockerRegistry.DockerHub) { - shouldRun &= context.ShouldRun(context.IsStableRelease, $"{nameof(DockerPublish)} DockerHub works only for tagged releases."); + shouldRun &= context.ShouldRun(context.IsStableRelease || context.IsTaggedPreRelease, $"{nameof(DockerPublish)} to DockerHub works only for tagged releases."); } return shouldRun; @@ -45,7 +45,6 @@ public override void Run(BuildContext context) { foreach (var dockerImage in context.Images) { - if (context.SkipArm64Image(dockerImage)) continue; context.DockerPushImage(dockerImage); } } diff --git a/build/docker/Tasks/DockerTest.cs b/build/docker/Tasks/DockerTest.cs index e06616ea95..74d05631e9 100644 --- a/build/docker/Tasks/DockerTest.cs +++ b/build/docker/Tasks/DockerTest.cs @@ -5,8 +5,8 @@ namespace Docker.Tasks; [TaskName(nameof(DockerTest))] [TaskDescription("Test the docker images containing the GitVersion Tool")] [TaskArgument(Arguments.DockerRegistry, Constants.DockerHub, Constants.GitHub)] -[TaskArgument(Arguments.DockerDotnetVersion, Constants.Version50, Constants.Version60, Constants.Version31)] -[TaskArgument(Arguments.DockerDistro, Constants.Alpine312, Constants.Debian10, Constants.Ubuntu2004)] +[TaskArgument(Arguments.DockerDotnetVersion, Constants.Version60, Constants.Version80)] +[TaskArgument(Arguments.DockerDistro, Constants.AlpineLatest, Constants.DebianLatest, Constants.UbuntuLatest)] [TaskArgument(Arguments.Architecture, Constants.Amd64, Constants.Arm64)] [IsDependentOn(typeof(DockerBuild))] public class DockerTest : FrostingTask<BuildContext> @@ -23,7 +23,7 @@ public override void Run(BuildContext context) { foreach (var dockerImage in context.Images) { - if (context.SkipArm64Image(dockerImage)) continue; + if (context.SkipImageTesting(dockerImage)) continue; context.DockerTestImage(dockerImage); } } diff --git a/build/docker/Utilities/Credentials.cs b/build/docker/Utilities/Credentials.cs new file mode 100644 index 0000000000..2f32094dd6 --- /dev/null +++ b/build/docker/Utilities/Credentials.cs @@ -0,0 +1,15 @@ +using Common.Utilities; + +namespace Docker.Utilities; + +public class Credentials +{ + public DockerHubCredentials? DockerHub { get; private init; } + + public static Credentials GetCredentials(ICakeContext context) => new() + { + DockerHub = new( + context.EnvironmentVariable("DOCKER_USERNAME"), + context.EnvironmentVariable("DOCKER_PASSWORD")), + }; +} diff --git a/build/docker/docker.csproj b/build/docker/docker.csproj index 4b1cccd25e..c7f9a603c9 100644 --- a/build/docker/docker.csproj +++ b/build/docker/docker.csproj @@ -6,4 +6,13 @@ <ItemGroup> <ProjectReference Include="..\common\common.csproj" /> </ItemGroup> + <ItemGroup> + <PackageReference Include="Cake.Http" /> + <PackageReference Include="Cake.Json" /> + </ItemGroup> + <ItemGroup> + <Compile Remove="content\**" /> + <EmbeddedResource Remove="content\**" /> + <None Remove="content\**" /> + </ItemGroup> </Project> diff --git a/build/docs/BuildContext.cs b/build/docs/BuildContext.cs index ca79d42541..c3b8efd477 100644 --- a/build/docs/BuildContext.cs +++ b/build/docs/BuildContext.cs @@ -4,13 +4,9 @@ namespace Docs; -public class BuildContext : BuildContextBase +public class BuildContext(ICakeContext context) : BuildContextBase(context) { public bool ForcePublish { get; set; } public Credentials? Credentials { get; set; } public WyamSettings? WyamSettings { get; set; } - - public BuildContext(ICakeContext context) : base(context) - { - } } diff --git a/build/docs/BuildLifetime.cs b/build/docs/BuildLifetime.cs index 34511e584a..db7ab45317 100644 --- a/build/docs/BuildLifetime.cs +++ b/build/docs/BuildLifetime.cs @@ -1,4 +1,5 @@ using Cake.Wyam; +using Common.Lifetime; using Common.Utilities; using Docs.Utilities; @@ -6,9 +7,9 @@ namespace Docs; public class BuildLifetime : BuildLifetimeBase<BuildContext> { - 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.ForcePublish = context.HasArgument("force"); @@ -19,14 +20,18 @@ public override void Setup(BuildContext context) Theme = "Samson", OutputPath = context.MakeAbsolute(Paths.ArtifactsDocs.Combine("preview")), RootPath = context.MakeAbsolute(Paths.Docs), - ConfigurationFile = context.MakeAbsolute(Paths.Docs.CombineWithFilePath("config.wyam")), Settings = new Dictionary<string, object> { { "BaseEditUrl", "https://github.com/gittools/GitVersion/tree/main/docs/input/" }, { "SourceFiles", context.MakeAbsolute(Paths.Src) + "/**/{!bin,!obj,!packages,!*.Tests,!GitTools.*,}/**/*.cs" }, { "Title", "GitVersion" }, - { "IncludeGlobalNamespace", false } - } + { "IncludeGlobalNamespace", false }, + { "IgnoreFolders", "**/mdsource" } + }, + EnvironmentVariables = new Dictionary<string, string> + { + { "DOTNET_ROLL_FORWARD", "Major" }, + }, }; context.StartGroup("Build Setup"); diff --git a/build/docs/Tasks/Default.cs b/build/docs/Tasks/Default.cs index 86555fbb28..9413406fc1 100644 --- a/build/docs/Tasks/Default.cs +++ b/build/docs/Tasks/Default.cs @@ -1,6 +1,4 @@ namespace Docs.Tasks; [TaskDescription("Shows this output")] -public class Default : Common.Tasks.Default -{ -} +public class Default : Common.Tasks.Default; diff --git a/build/docs/Tasks/GenerateSchemas.cs b/build/docs/Tasks/GenerateSchemas.cs new file mode 100644 index 0000000000..f4defba0dd --- /dev/null +++ b/build/docs/Tasks/GenerateSchemas.cs @@ -0,0 +1,21 @@ +using Common.Utilities; + +namespace Docs.Tasks; + +[TaskName(nameof(GenerateSchemas))] +[TaskDescription("Generate schemas")] +public sealed class GenerateSchemas : FrostingTask<BuildContext> +{ + public override void Run(BuildContext context) + { + var schemaTool = context.GetSchemaDotnetToolLocation(); + var gitVersion = context.Version!.GitVersion; + var version = $"{gitVersion.Major}.{gitVersion.Minor}"; + var schemaTargetDir = context.MakeAbsolute(Paths.Root.Combine("schemas")); + context.EnsureDirectoryExists(schemaTargetDir); + context.Information($"Schema tool: {schemaTool}"); + context.Information($"Schema target dir: {schemaTargetDir}"); + context.Information($"Schema version: {version}"); + context.DotNetExecute(schemaTool, $"--Version {version} --OutputDirectory {schemaTargetDir}"); + } +} diff --git a/build/docs/Tasks/PreviewDocs.cs b/build/docs/Tasks/PreviewDocs.cs index a25084e268..a9734dd97c 100644 --- a/build/docs/Tasks/PreviewDocs.cs +++ b/build/docs/Tasks/PreviewDocs.cs @@ -20,8 +20,13 @@ public override void Run(BuildContext context) { if (context.WyamSettings is not null) { + var schemaTargetDir = Paths.ArtifactsDocs.Combine("preview").Combine("schemas"); + context.EnsureDirectoryExists(schemaTargetDir); + context.CopyDirectory(Paths.Schemas, schemaTargetDir); + context.WyamSettings.Preview = true; context.WyamSettings.Watch = true; + context.WyamSettings.NoClean = true; context.WyamSettings.Settings.Add("Host", "gittools.github.io"); context.Wyam(context.WyamSettings); } diff --git a/build/docs/Tasks/PublishDocs.cs b/build/docs/Tasks/PublishDocs.cs index d9f1c7d06b..c4463d3cb6 100644 --- a/build/docs/Tasks/PublishDocs.cs +++ b/build/docs/Tasks/PublishDocs.cs @@ -27,7 +27,7 @@ public override bool ShouldRun(BuildContext context) { var shouldRun = true; shouldRun &= context.ShouldRun(context.DirectoryExists(Paths.Docs), "Wyam documentation directory is missing"); - shouldRun &= context.ShouldRun(context.IsStableRelease || context.IsPreRelease || context.ForcePublish, $"{nameof(PublishDocs)} works only for releases."); + shouldRun &= context.ShouldRun(context.IsStableRelease || context.ForcePublish, $"{nameof(PublishDocs)} works only for releases."); return shouldRun; } @@ -58,7 +58,7 @@ private static bool AnyDocsChanged(ICakeContext context) var filesChanged = context.GitDiff(Paths.Root, sourceCommit.Sha); const string path = "docs/"; - var docFileChanged = filesChanged.Any(file => file.OldPath.StartsWith(path) || file.Path.StartsWith(path) || file.Path.Contains("config.wyam")); + var docFileChanged = filesChanged.Any(file => file.OldPath.StartsWith(path) || file.Path.StartsWith(path)); return docFileChanged; } @@ -68,7 +68,7 @@ private static void PublishDocumentation(BuildContext context) var sourceCommit = context.GitLogTip("./"); var publishFolder = context.MakeAbsolute(Paths.ArtifactsDocs.Combine("_published").Combine(DateTime.Now.ToString("yyyyMMdd_HHmmss"))); - context.Information("Publishing Folder: {0}", publishFolder); + context.Information($"Publishing Folder: {publishFolder}"); context.Information("Getting publish branch..."); context.GitClone($"https://github.com/{Constants.RepoOwner}/{Constants.Repository}", publishFolder, new GitCloneSettings { @@ -82,6 +82,10 @@ private static void PublishDocumentation(BuildContext context) context.Wyam(context.WyamSettings); } + var schemaTargetDir = publishFolder.Combine("schemas"); + context.EnsureDirectoryExists(schemaTargetDir); + context.CopyDirectory(Paths.Schemas, schemaTargetDir); + if (!context.GitHasUncommitedChanges(publishFolder)) return; context.Information("Stage all changes..."); diff --git a/build/docs/Utilities/Credentials.cs b/build/docs/Utilities/Credentials.cs index 1726315379..13de8ec6db 100644 --- a/build/docs/Utilities/Credentials.cs +++ b/build/docs/Utilities/Credentials.cs @@ -4,10 +4,10 @@ namespace Docs.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( + GitHub = new( context.EnvironmentVariable("GITHUB_TOKEN"), context.EnvironmentVariable("GITHUB_USERNAME")) }; diff --git a/build/docs/docs.csproj b/build/docs/docs.csproj index 89058b02d8..a210fc579f 100644 --- a/build/docs/docs.csproj +++ b/build/docs/docs.csproj @@ -7,7 +7,7 @@ <ProjectReference Include="..\common\common.csproj" /> </ItemGroup> <ItemGroup> - <PackageReference Include="Cake.Git" Version="2.0.0" /> - <PackageReference Include="Cake.Wyam2" Version="3.0.0-rc2" /> + <PackageReference Include="Cake.Frosting.Git" /> + <PackageReference Include="Cake.Wyam" /> </ItemGroup> </Project> diff --git a/build/global.json b/build/global.json deleted file mode 100644 index 07fa13d9ea..0000000000 --- a/build/global.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "sdk": { - "version": "5.0", - "rollForward": "latestMajor", - "allowPrerelease": true - } -} diff --git a/build/nuspec/GitVersion.CommandLine.nuspec b/build/nuspec/GitVersion.CommandLine.nuspec deleted file mode 100644 index 8fac567a70..0000000000 --- a/build/nuspec/GitVersion.CommandLine.nuspec +++ /dev/null @@ -1,21 +0,0 @@ -<?xml version="1.0"?> -<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd"> - <metadata> - <id>GitVersion.CommandLine</id> - <version>$version$</version> - <title>GitVersion.CommandLine - 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$ - GitVersion - 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..e91094077a 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] | ## Compatibility @@ -17,13 +16,13 @@ GitVersion works on Windows, Linux, and Mac. ## Quick Links -* [Documentation][docs] -* [Contributing][contribute] -* [Why GitVersion][why] -* [Usage][usage] -* [How it works][how] -* [FAQ][faq] -* [Who is using GitVersion][who] +* [Documentation][docs] +* [Contributing][contribute] +* [Why GitVersion][why] +* [Usage][usage] +* [How it works][how] +* [FAQ][faq] +* [Who is using GitVersion][who] ## GitVersion in action! @@ -31,8 +30,8 @@ GitVersion works on Windows, Linux, and Mac. You are seeing: -* Pull requests being built as pre-release builds -* A branch called `release-1.0.0` producing beta v1 packages +* Pull requests being built as pre-release builds +* A branch called `release-1.0.0` producing beta v1 packages ## Icon @@ -47,8 +46,6 @@ from The Noun Project. [gvt]: https://www.nuget.org/packages/GitVersion.MsBuild [gvt-badge]: https://img.shields.io/nuget/v/GitVersion.MsBuild.svg?logo=nuget [gitversiontask]: https://www.nuget.org/packages/GitVersionTask/ -[gvcl]: https://www.nuget.org/packages/GitVersion.CommandLine -[gvcl-badge]: https://img.shields.io/nuget/v/GitVersion.CommandLine.svg?logo=nuget [gvgt]: https://www.nuget.org/packages/GitVersion.Tool [gvgt-badge]: https://img.shields.io/nuget/v/GitVersion.Tool.svg?logo=nuget [contribute]: https://github.com/GitTools/GitVersion/blob/main/CONTRIBUTING.md 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/config.wyam b/docs/config.wyam deleted file mode 100644 index c242a361ce..0000000000 --- a/docs/config.wyam +++ /dev/null @@ -1 +0,0 @@ -Pipelines["RenderPages"].Replace("WriteMetadata", new Headings(2)); 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/img/DocumentationSamplesForGitFlow_DevelopBranch.png b/docs/input/docs/img/DocumentationSamplesForGitFlow_DevelopBranch.png new file mode 100644 index 0000000000..124c10cca2 Binary files /dev/null and b/docs/input/docs/img/DocumentationSamplesForGitFlow_DevelopBranch.png differ diff --git a/docs/input/docs/img/DocumentationSamplesForGitFlow_FeatureFromDevelopBranch.png b/docs/input/docs/img/DocumentationSamplesForGitFlow_FeatureFromDevelopBranch.png new file mode 100644 index 0000000000..2a499a520a Binary files /dev/null and b/docs/input/docs/img/DocumentationSamplesForGitFlow_FeatureFromDevelopBranch.png differ diff --git a/docs/input/docs/img/DocumentationSamplesForGitFlow_FeatureFromMainBranch.png b/docs/input/docs/img/DocumentationSamplesForGitFlow_FeatureFromMainBranch.png new file mode 100644 index 0000000000..af6daf6711 Binary files /dev/null and b/docs/input/docs/img/DocumentationSamplesForGitFlow_FeatureFromMainBranch.png differ diff --git a/docs/input/docs/img/DocumentationSamplesForGitFlow_HotfixBranch.png b/docs/input/docs/img/DocumentationSamplesForGitFlow_HotfixBranch.png new file mode 100644 index 0000000000..1a0109bf9a Binary files /dev/null and b/docs/input/docs/img/DocumentationSamplesForGitFlow_HotfixBranch.png differ diff --git a/docs/input/docs/img/DocumentationSamplesForGitFlow_ReleaseBranch.png b/docs/input/docs/img/DocumentationSamplesForGitFlow_ReleaseBranch.png new file mode 100644 index 0000000000..24b77c37b1 Binary files /dev/null and b/docs/input/docs/img/DocumentationSamplesForGitFlow_ReleaseBranch.png differ diff --git a/docs/input/docs/img/DocumentationSamplesForGitFlow_SupportBranch.png b/docs/input/docs/img/DocumentationSamplesForGitFlow_SupportBranch.png new file mode 100644 index 0000000000..e38e6cc065 Binary files /dev/null and b/docs/input/docs/img/DocumentationSamplesForGitFlow_SupportBranch.png differ diff --git a/docs/input/docs/img/DocumentationSamplesForGitFlow_VersionedHotfixBranch.png b/docs/input/docs/img/DocumentationSamplesForGitFlow_VersionedHotfixBranch.png new file mode 100644 index 0000000000..f9a695b7da Binary files /dev/null and b/docs/input/docs/img/DocumentationSamplesForGitFlow_VersionedHotfixBranch.png differ diff --git a/docs/input/docs/img/DocumentationSamplesForGitFlow_VersionedReleaseBranch.png b/docs/input/docs/img/DocumentationSamplesForGitFlow_VersionedReleaseBranch.png new file mode 100644 index 0000000000..c9d0ca996e Binary files /dev/null and b/docs/input/docs/img/DocumentationSamplesForGitFlow_VersionedReleaseBranch.png differ diff --git a/docs/input/docs/img/DocumentationSamplesForGitHubFlow_FeatureBranch.png b/docs/input/docs/img/DocumentationSamplesForGitHubFlow_FeatureBranch.png new file mode 100644 index 0000000000..af6daf6711 Binary files /dev/null and b/docs/input/docs/img/DocumentationSamplesForGitHubFlow_FeatureBranch.png differ diff --git a/docs/input/docs/img/DocumentationSamplesForGitHubFlow_ReleaseBranch.png b/docs/input/docs/img/DocumentationSamplesForGitHubFlow_ReleaseBranch.png new file mode 100644 index 0000000000..22d7a76e47 Binary files /dev/null and b/docs/input/docs/img/DocumentationSamplesForGitHubFlow_ReleaseBranch.png differ diff --git a/docs/input/docs/img/DocumentationSamplesForGitHubFlow_VersionedReleaseBranch.png b/docs/input/docs/img/DocumentationSamplesForGitHubFlow_VersionedReleaseBranch.png new file mode 100644 index 0000000000..f95e478d5c Binary files /dev/null and b/docs/input/docs/img/DocumentationSamplesForGitHubFlow_VersionedReleaseBranch.png differ diff --git a/docs/input/docs/learn/branching-strategies/contribute-examples.md b/docs/input/docs/learn/branching-strategies/contribute-examples.md index c162dfe85e..3651bc91c6 100644 --- a/docs/input/docs/learn/branching-strategies/contribute-examples.md +++ b/docs/input/docs/learn/branching-strategies/contribute-examples.md @@ -9,8 +9,8 @@ The examples are generated by GitVersion tests, there are a number of services which will then turn the sequence diagram text into an image to use in the docs. Here are some links which could be useful -* [PlantUML Sequence Diagrams](https://www.plantuml.com/sequence.html) -* [PlantText Online editor](https://www.planttext.com) +* [PlantUML Sequence Diagrams](https://www.plantuml.com/sequence.html) +* [PlantText Online editor](https://www.planttext.com) The tests are quite simple. Using the methods on the `fixture` itself will record that action in the sequence diagram. If you do not want the action diff --git a/docs/input/docs/learn/branching-strategies/gitflow/examples.md b/docs/input/docs/learn/branching-strategies/gitflow/examples.md index a2915f17bd..1511b617fb 100644 --- a/docs/input/docs/learn/branching-strategies/gitflow/examples.md +++ b/docs/input/docs/learn/branching-strategies/gitflow/examples.md @@ -6,61 +6,106 @@ RedirectFrom: - docs/git-branching-strategies/gitflow-examples --- -These examples are using the _default_ configuration with GitVersion. Which is -[continuous deployment](/docs/reference/modes/continuous-deployment) mode for -`develop` and [continuous delivery](/docs/reference/modes/continuous-delivery) mode -for all other branches. - -This default configuration allows you to publish CI builds from develop to a CI -MyGet feed, or another CI feed. Then all other branches are manually released -then tagged. Read more about this at [version increments](/docs/reference/version-increments). +These examples are illustrating the usage of the supported `GitFlow` workflow +in GitVersion. To enable this workflow, the builtin template +[GitFlow/v1](/docs/workflows/GitFlow/v1.json) needs to be referenced in the +configuration as follows: +```yaml +workflow: GitFlow/v1 +mode: ContinuousDelivery +``` + +Where +the [continuous deployment][continuous-deployment] mode for no branches, +the [continuous delivery][continuous-delivery] mode for +`main`, `support` and `develop` branches and +the [manual deployment][manual-deployment] mode +for `release`, `feature`, `hotfix` and `unknown` branches are specified. + +This configuration allows you to publish CI (Continuous Integration) builds +from `main`, `support` and `develop` branches to an artifact repository. +All other branches are manually published. Read more about this at +[version increments](/docs/reference/version-increments). + +:::{.alert .alert-info} +The _continuous delivery_ mode has been used for the `main` and the +`support` branch in this examples (specified as a fallback on the root +configuration layer) to illustrate how the version increments are applied. +In production context the _continuous deployment_ mode might be a better +option when e.g. the release process is automated or the commits are tagged +by the pipeline automatically. +::: ## Feature Branches -Feature branches will take the feature branch name and use that as the -pre-release tag. +Feature branches can be used in the `GitFlow` workflow to implement a +feature in an isolated environment. Feature branches will take the feature +branch name and use that as the pre-release label. Feature branches will be +created from a `develop`, `release`, `main`, `support` or `hotfix` branch. -![GitFlow](/docs/img/05119d0cd4ecaaefff94\_feature-branch.png) +### Create feature branch from main -Notice after the feature branch is merged, the version on `develop` is -`1.3.0-alpha.3`. This is due to `develop` running in _continuous deployment_ -mode. If you configured `develop` to use _continuous delivery_ the version would -still be `1.3.0-alpha.1` and you would have to use release tags to increment the -`alpha.1`. +![GitFlow](/docs/img/DocumentationSamplesForGitFlow\_FeatureFromMainBranch.png) -You can see the difference on the feature branch itself, notice the version is -the same before and after the commit on the feature branch? Only the metadata -has changed. If you released the feature branch artifacts then tagged the -commit, the following commit would increase to `-beta.2`. +:::{.alert .alert-info} +After the feature branch is merged, the version on `main` is `2.0.0-5`. +This is due to `main` running in _continuous delivery_ mode. If `main` was +configured to use _continuous deployment_ the version would be `2.0.0`. +::: -## Pull Request +### Create feature branch from develop -Because feature branches are most likely pushed to a fork, we are showing the -pull request branch name which is created when you submit a pull request +![GitFlow](/docs/img/DocumentationSamplesForGitFlow\_FeatureFromDevelopBranch.png) -![GitFlow](/docs/img/09fdf46995b771f3164a_pull-request.png) +:::{.alert .alert-info} +After the feature branch is merged, the version on `develop` is +`1.3.0-alpha.3`. This is due to `develop` running in _continuous delivery_ +mode. If `develop` was configured to use _manual deployment_ the version +would still be `1.3.0-alpha.1` and you would have to use pre-release tags +to increment the pre-release label `alpha.1`. +::: ## Hotfix Branches -Hotfix branches are used when you need to do a _patch_ release in GitFlow and -are always created off `main` +Hotfix branches are used when you need to do a _patch_ release in the +`GitFlow` workflow and are always created from `main` branch. + +### Create hotfix branch + +![GitFlow](/docs/img/DocumentationSamplesForGitFlow\_HotfixBranch.png) + +### Create hotfix branch with version number + +![GitFlow](/docs/img/DocumentationSamplesForGitFlow\_VersionedHotfixBranch.png) -![GitFlow](/docs/img/f26ae57adbd9b74f74c4\_hotfix.png) +## Release Branches -## Minor Release Branches +Release branches are used for major and minor releases to stabilize a RC +(Release Candidate) or to integrate features (in parallel) targeting different +iterations. Release branches are taken from `main` (or from `develop`) and will +be merged back afterwards. Finally the `main` branch is tagged with the +released version. -Release branches are used for both major and minor releases for stabilisation -before a release. Release branches are taken off `develop` then merged to both -`develop` and `main`. Finally `main` is tagged with the released version. +Release branches can be used in the `GitFlow` as well as `GitHubFlow` workflow. +Sometimes you want to start on a large feature which may take a while +to stabilize so you want to keep it off main. +In these scenarios you can either create a long lived +feature branch (if you do not know the version number this large feature will go +into, and it's non-breaking) otherwise you can create a release branch for the +next major version. You can then submit pull requests to the long lived feature +branch or the release branch. -![GitFlow](/docs/img/6d33d35a70a777608fa1\_minor-release.png) +### Create release branch -## Major Release Branches +![GitFlow](/docs/img/DocumentationSamplesForGitFlow\_ReleaseBranch.png) -Major releases are just like minor releases, the difference is you bump the -major in the release branch name. +### Create release branch with version -![GitFlow](/docs/img/39f9d8b8b007c82f1f80\_major-release.png) +![GitFlow](/docs/img/DocumentationSamplesForGitFlow\_VersionedReleaseBranch.png) + +## Develop Branch + +![GitFlow](/docs/img/DocumentationSamplesForGitFlow\_DevelopBranch.png) ## Support Branches @@ -71,17 +116,15 @@ majors, then name your branch `support/.x` (i.e `support/1.x`), to support minors use `support/..x` or `support/..0`. (i.e `support/1.3.x` or `support/1.3.0`) -### Hotfix - -Depending on what you name your support branch, you may or may not need a hotfix -branch. Naming it `support/1.x` will automatically bump the patch, if you name -it `support/1.3.0` then the version in branch name rule will kick in and the -patch _will not_ automatically bump, meaning you have to use hotfix branches. -![GitFlow](/docs/img/b035b8ca99bd34239518\_support-hotfix.png) +![GitFlow](/docs/img/DocumentationSamplesForGitFlow\_SupportBranch.png) -### Minor Release - -![GitFlow](/docs/img/2167fb1c4a5cf84edfd8\_support-minor.png) +:::{.alert .alert-info} +Depending on what you name your support branch, you may or may not need a +hotfix branch. Naming it `support/1.x` will automatically bump the patch, +if you name it `support/1.3.0` then the version in branch name rule will +kick in and the patch _will not_ automatically bump, meaning you have to +use hotfix branches. +::: ## To Contribute @@ -89,5 +132,8 @@ See [contributing examples](/docs/learn/branching-strategies/contribute-examples ### Source -See `DocumentationSamples.GitFlowExample`. To update, modify then run test. -Update +See `DocumentationSamplesForGitFlow.cs`. To update, modify then run test. + +[continuous-deployment]: /docs/reference/modes/continuous-deployment +[continuous-delivery]: /docs/reference/modes/continuous-delivery +[manual-deployment]: /docs/reference/modes/manual-deployment diff --git a/docs/input/docs/learn/branching-strategies/gitflow/index.md b/docs/input/docs/learn/branching-strategies/gitflow/index.md index 8e0e71dcf5..dbb5688c1b 100644 --- a/docs/input/docs/learn/branching-strategies/gitflow/index.md +++ b/docs/input/docs/learn/branching-strategies/gitflow/index.md @@ -10,20 +10,20 @@ SemVer compatible versions from this structure. ## Assumptions: -* Using [GitFlow branching model](https://nvie.com/git-model/) which always has a +* Using [GitFlow branching model](https://nvie.com/git-model/) which always has a main and a develop branch -* Following [Semantic Versioning](https://semver.org/) -* Planned releases (bumps in major or minor) are done on release branches +* Following [Semantic Versioning](https://semver.org/) +* Planned releases (bumps in major or minor) are done on release branches 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) +* 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/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 +* Tags are used on the main branch and reflects the SemVer of each stable release eg 3.3.8 , 4.0.0, etc -* Tags can also be used to override versions while we transition repositories +* Tags can also be used to override versions while we transition repositories over to GitVersion -* Using a build server with multi-branch building enabled eg TeamCity 8 +* Using a build server with multi-branch building enabled eg TeamCity 8 ## How Branches are handled @@ -31,8 +31,8 @@ The descriptions of how commits and branches are versioned can be considered a type of pseudopod. With that in mind there are a few common "variables" that we will refer to: -* `targetBranch` => the branch we are targeting -* `targetCommit` => the commit we are targeting on `targetbranch` +* `targetBranch` => the branch we are targeting +* `targetCommit` => the commit we are targeting on `targetbranch` ### Main branch @@ -44,15 +44,15 @@ If we try to build from a commit that is no merge and no tag then assume `0.1.0` `mergeVersion` => the SemVer extracted from `targetCommit.Message` -* major: `mergeVersion.Major` -* minor: `mergeVersion.Minor` -* patch: `mergeVersion.Patch` -* pre-release: 0 (perhaps count ahead commits later) -* stability: final +* major: `mergeVersion.Major` +* minor: `mergeVersion.Minor` +* patch: `mergeVersion.Patch` +* pre-release: 0 (perhaps count ahead commits later) +* stability: final Optional Tags (only when transitioning existing repository): -* TagOnHeadCommit.Name={semver} => overrides the version to be {semver} +* TagOnHeadCommit.Name={semver} => overrides the version to be {semver} Long version: @@ -68,10 +68,10 @@ Long version: `main` that is older than the `targetCommitDate` `mainMergeVersion` => the SemVer extracted from `mainVersionCommit.Message` -* major: `mainMergeVersion.Major` -* minor: `mainMergeVersion.Minor + 1` (0 if the override above is used) -* patch: 0 -* pre-release: `alpha.{n}` where n = how many commits `develop` is in front of +* major: `mainMergeVersion.Major` +* minor: `mainMergeVersion.Minor + 1` (0 if the override above is used) +* patch: 0 +* pre-release: `alpha.{n}` where n = how many commits `develop` is in front of `mainVersionCommit.Date` ('0' padded to 4 characters) Long version: @@ -87,10 +87,10 @@ Named: `hotfix-{versionNumber}` eg `hotfix-1.2` `branchVersion` => the SemVer extracted from `targetBranch.Name` -* major: `mergeVersion.Major` -* minor: `mergeVersion.Minor` -* patch: `mergeVersion.Patch` -* pre-release: `beta{n}` where n = number of commits on branch ('0' padded to +* major: `mergeVersion.Major` +* minor: `mergeVersion.Minor` +* patch: `mergeVersion.Patch` +* pre-release: `beta{n}` where n = number of commits on branch ('0' padded to 4 characters) Long version: @@ -102,9 +102,9 @@ Long version: ### Release branches -* May branch off from: develop -* Must merge back into: develop and main -* Branch naming convention: `release-{n}` eg `release-1.2` +* May branch off from: develop +* Must merge back into: develop and main +* Branch naming convention: `release-{n}` eg `release-1.2` `releaseVersion` => the SemVer extracted from `targetBranch.Name` `releaseTag` => the first version tag placed on the branch. Note that at least @@ -112,10 +112,10 @@ one version tag is required on the branch. The recommended initial tag is `{releaseVersion}.0-alpha1`. So for a branch named `release-1.2` the recommended tag would be `1.2.0-alpha1` -* major: `mergeVersion.Major` -* minor: `mergeVersion.Minor` -* patch: 0 -* pre-release: `{releaseTag.preRelease}.{n}` where n = 1 + the number of commits +* major: `mergeVersion.Major` +* minor: `mergeVersion.Minor` +* patch: 0 +* pre-release: `{releaseTag.preRelease}.{n}` where n = 1 + the number of commits since `releaseTag`. So on a branch named `release-1.2` with a tag `1.2.0-alpha1` and 4 commits after @@ -139,10 +139,10 @@ Branch naming convention: anything except `main`, `develop`, `release-{n}`, or TODO: feature branches cannot start with a SemVer. to stop people from create branches named like "4.0.3" -* major: `mainMergeVersion.Major` -* minor: `mainMergeVersion.Minor + 1` (0 if the override above is used) -* patch: 0 -* pre-release: `alpha.feature-{n}` where n = First 8 characters of the commit +* major: `mainMergeVersion.Major` +* minor: `mainMergeVersion.Minor + 1` (0 if the override above is used) +* patch: 0 +* pre-release: `alpha.feature-{n}` where n = First 8 characters of the commit SHA of the first commit Long version: @@ -159,10 +159,10 @@ Must merge back into: `develop` Branch naming convention: anything except `main`, `develop`, `release-{n}`, or `hotfix-{n}`. Canonical branch name contains `/pull/`. -* major: `mainMergeVersion.Major` -* minor: `mainMergeVersion.Minor + 1` (0 if the override above is used) -* patch: 0 -* pre-release: `alpha.pull{n}` where n = the pull request number ('0' padded to +* major: `mainMergeVersion.Major` +* minor: `mainMergeVersion.Minor + 1` (0 if the override above is used) +* patch: 0 +* pre-release: `alpha.pull{n}` where n = the pull request number ('0' padded to 4 characters) ## Nightly Builds diff --git a/docs/input/docs/learn/branching-strategies/githubflow/examples.md b/docs/input/docs/learn/branching-strategies/githubflow/examples.md index 4a71e6dc4f..0f79be951a 100644 --- a/docs/input/docs/learn/branching-strategies/githubflow/examples.md +++ b/docs/input/docs/learn/branching-strategies/githubflow/examples.md @@ -4,17 +4,65 @@ Title: GitHubFlow Examples RedirectFrom: docs/git-branching-strategies/githubflow-examples --- -## Feature branch +These examples are illustrating the usage of the supported `GitHubFlow` workflow +in GitVersion. To enable this workflow, the builtin template +[GitHubFlow/v1](/docs/workflows/GitHubFlow/v1.json) needs to be referenced in the +configuration as follows: +```yaml +workflow: GitHubFlow/v1 +mode: ContinuousDelivery +``` -![GitHubFlow](/docs/img/githubflow_feature-branch.png) +Where +the [continuous deployment][continuous-deployment] mode for no branches, +the [continuous delivery][continuous-delivery] mode for +`main` branch and +the [manual deployment][manual-deployment] mode +for `release`, `feature` and `unknown` branches are specified. -## Pull requests +This configuration allows you to publish CI (Continuous Integration) builds +from `main` branch to an artifact repository. +All other branches are manually published. Read more about this at +[version increments](/docs/reference/version-increments). -![GitHubFlow](/docs/img/githubflow_pull-request.png) +:::{.alert .alert-info} +The _continuous delivery_ mode has been used for the `main` branch in this +examples (specified as a fallback on the root +configuration layer) to illustrate how the version increments are applied. +In production context the _continuous deployment_ mode might be a better +option when e.g. the release process is automated or the commits are tagged +by the pipeline automatically. +::: -## Release branch +## Feature Branch -Release branches can be used in GitHubFlow as well as GitFlow. Sometimes you +Feature branches can be used in the `GitHubFlow` workflow to implement a +feature or fix a bug in an isolated environment. Feature branches will take +the feature +branch name and use that as the pre-release label. Feature branches will be +created from a `main` or `release` branch. + +### Create feature branch from main + +![GitHubFlow](/docs/img/DocumentationSamplesForGitHubFlow_FeatureBranch.png) + +:::{.alert .alert-info} +After the feature branch is merged, the version on `main` is `2.0.0-5`. +This is due to `main` running in _continuous delivery_ mode. If `main` was +configured to use _continuous deployment_ the version would be `2.0.0`. +::: + +## Release Branches + +Release branches are used for major, minor and patch releases to stabilize a RC +(Release Candidate) or to integrate features/hotfixes (in parallel) targeting +different +iterations. Release branches are taken from `main` and will +be merged back afterwards. Finally the `main` branch is tagged with the +released version. + +Release branches can be used in the `GitHubFlow` as well as `GitFlow` workflow. +Sometimes you want to start on a large feature which may take a while to stabilize so you want to keep it off main. In these scenarios you can either create a long lived feature branch (if you do not know the version number this large feature will go @@ -22,4 +70,22 @@ into, and it's non-breaking) otherwise you can create a release branch for the next major version. You can then submit pull requests to the long lived feature branch or the release branch. -![GitFlow](/docs/img/githubflow_release-branch.png) +### Create release branch + +![GitFlow](/docs/img/DocumentationSamplesForGitHubFlow_ReleaseBranch.png) + +### Create release branch with version + +![GitFlow](/docs/img/DocumentationSamplesForGitHubFlow_VersionedReleaseBranch.png) + +## To Contribute + +See [contributing examples](/docs/learn/branching-strategies/contribute-examples). + +### Source + +See `DocumentationSamplesForGitHubFlow.cs`. To update, modify then run test. + +[continuous-deployment]: /docs/reference/modes/continuous-deployment +[continuous-delivery]: /docs/reference/modes/continuous-delivery +[manual-deployment]: /docs/reference/modes/manual-deployment diff --git a/docs/input/docs/learn/branching-strategies/githubflow/index.md b/docs/input/docs/learn/branching-strategies/githubflow/index.md index b7e8d0593d..89ae283bfa 100644 --- a/docs/input/docs/learn/branching-strategies/githubflow/index.md +++ b/docs/input/docs/learn/branching-strategies/githubflow/index.md @@ -11,19 +11,19 @@ are much better off with a simpler workflow. GitHubFlow is in a nutshell: -1. Update main to latest [upstream](/docs/learn/git-setup#upstream) code -2. Create a feature branch `git checkout -b myFeatureBranch` -3. Do the feature/work -4. Push feature branch to [origin](/docs/learn/git-setup#origin) -5. Create pull request from origin/ -> upstream/main -6. Review, fix raised comments, merge your PR or even better, get someone else to. +1. Update main to latest [upstream](/docs/learn/git-setup#upstream) code +2. Create a feature branch `git checkout -b myFeatureBranch` +3. Do the feature/work +4. Push feature branch to [origin](/docs/learn/git-setup#origin) +5. Create pull request from origin/ -> upstream/main +6. Review, fix raised comments, merge your PR or even better, get someone else to. The main rule of GitHub Flow is that main should _always_ be deployable. GitHub Flow allows and encourages [continuous delivery](/docs/reference/modes/continuous-delivery). ## 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) -* [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/) +* [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) +* [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/branching-strategies/overview.md b/docs/input/docs/learn/branching-strategies/overview.md index aae1372e90..b5053214b3 100644 --- a/docs/input/docs/learn/branching-strategies/overview.md +++ b/docs/input/docs/learn/branching-strategies/overview.md @@ -26,32 +26,32 @@ As mentioned above the GitVersion docs cover [GitHubFlow][githubflow] and GitHubFlow is a simple and powerful branching strategy. It is what GitHub uses and the branching strategy most open source projects use. -* [Mainline development][mainline] on `main`. -* Work on [feature branches][feature-branches], merge into `main` via a [pull +* [Mainline development][mainline] on `main`. +* Work on [feature branches][feature-branches], merge into `main` via a [pull request][pull-request]. -* Works well for [continuous delivery][continuous-delivery]. -* Does not have a way to manage/maintain old releases. -* Only allows working on a single release at a time. +* Works well for [continuous delivery][continuous-delivery]. +* Does not have a way to manage/maintain old releases. +* Only allows working on a single release at a time. ### Git Flow GitFlow is a more complex and complete branching strategy. It also gives much more control over when features and code is released. -* Development on `develop` branch. -* `main` only contains _released_ code. -* Supports maintaining old releases (like nServiceBus, they support the last 3 +* Development on `develop` branch. +* `main` only contains _released_ code. +* Supports maintaining old releases (like nServiceBus, they support the last 3 major versions with bug fixes and security updates). -* Supports development on multiple releases at one time. +* Supports development on multiple releases at one time. ## Choosing a branching strategy There are a few reasons you would pick GitFlow over GitHubFlow, they are: -1. You need to support multiple major versions at the same time. -2. You need to work on multiple releases at the same time. +1. You need to support multiple major versions at the same time. +2. You need to work on multiple releases at the same time. -* For example a new feature which will go in the next major version, while bug +* For example a new feature which will go in the next major version, while bug fixes/smaller features are still going into the current release But if you do not have a good reason to go with GitFlow, then start with diff --git a/docs/input/docs/learn/dynamic-repositories.md b/docs/input/docs/learn/dynamic-repositories.md index 0ba9bf49cb..848ac16391 100644 --- a/docs/input/docs/learn/dynamic-repositories.md +++ b/docs/input/docs/learn/dynamic-repositories.md @@ -31,11 +31,11 @@ will assume there is already a ".git" folder present, and it will use it. To tell GitVersion.exe to obtain the repository on the fly, you need to call `GitVersion.exe` with the following arguments: -* `/url [the url of your git repo]` -* `/u [authentication username]` -* `/p [authentication password]` -* `/b [branch name]` -* `/c [commit id]` +* `/url [the url of your git repo]` +* `/u [authentication username]` +* `/p [authentication password]` +* `/b [branch name]` +* `/c [commit id]` Please note that these arguments are described when calling `GitVersion.exe /?`. diff --git a/docs/input/docs/learn/faq.md b/docs/input/docs/learn/faq.md index 631948c857..b179215d85 100644 --- a/docs/input/docs/learn/faq.md +++ b/docs/input/docs/learn/faq.md @@ -49,13 +49,6 @@ SemVer. If you want to fix the version, use `NuGetVersionV2` which will stay the same after NuGet 3.0 comes out -## How do I choose my branching strategy (GitFlow vs GitHubFlow) - -If you run `gitversion init` then choose `Getting started wizard` then choose -`Unsure, tell me more`, GitVersion will run through a series of questions which -will try and help point you towards a branching strategy and why you would use -it. - ## Merged branch names as version source When GitVersion considers previous commits to calculate a version number, it's diff --git a/docs/input/docs/learn/how-it-works.md b/docs/input/docs/learn/how-it-works.md index a33f2695b3..36ba942451 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 @@ -16,12 +16,12 @@ it _much_ more predictable and easier to diagnose when odd things are happening. GitVersion has three distinct steps for calculating versions in v3. -1. If the current commit is tagged, the tag is used and build metadata +1. If the current commit is tagged, the tag is used and build metadata (excluding commit count) is added. The other two steps will not execute. -2. A set of strategies are evaluated to decide on the base version and some +2. A set of strategies are evaluated to decide on the base version and some metadata about that version. These strategies include HighestReachableTag, NextVersionInConfig, MergedBranchWithVersion, VersionInBranchName etc. -3. The highest base version is selected, using that base version as the new +3. The highest base version is selected, using that base version as the new version is calculated. Visually it looks something like this: @@ -39,28 +39,30 @@ simply to show what happens if the check is true. Currently we have the following strategies: -* `HighestTagBaseVersionStrategy` - Finds the highest reachable tag from the +* `HighestTagBaseVersionStrategy` - Finds the highest reachable tag from the current branch -* `VersionInBranchBaseVersionStrategy` - Extracts version information from the +* `VersionInBranchBaseVersionStrategy` - Extracts version information from the branch name (e.g., `release/3.0.0` will find `3.0.0`) -* `ConfigNextVersionBaseVersionStrategy` - Returns the version from the +* `ConfigNextVersionBaseVersionStrategy` - Returns the version from the GitVersion.yaml file -* `MergeMessageBaseVersionStrategy` - Finds version numbers from merge messages +* `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: -* `Source` - Description of the source (e.g., `Merge message 'Merge 'release/3.0.0' into 'main'`) -* `ShouldIncrement` - Some strategies should have the version incremented, +* `Source` - Description of the source (e.g., `Merge message 'Merge 'release/3.0.0' into 'main'`) +* `ShouldIncrement` - Some strategies should have the version incremented, others do not (e.g., `ConfigNextVersionBaseVersionStrategy` returns false, `HighestTagBaseVersionStrategy` returns true) -* `SemanticVersion` - SemVer of the base version strategy -* `BaseVersionSource` - SHA hash of the source. Commits will be counted from +* `SemanticVersion` - SemVer of the base version strategy +* `BaseVersionSource` - SHA hash of the source. Commits will be counted from this hash. Can be null (e.g., `ConfigNextVersionBaseVersionStrategy` returns null). -* `BranchNameOverride` - When `useBranchName` or `{BranchName}` is used in the +* `BranchNameOverride` - When `useBranchName` or `{BranchName}` is used in the tag configuration, this allows the branch name to be changed by a base version. `VersionInBranchBaseVersionStrategy` uses this to strip out anything before the first `-` or `/.` so `foo` ends up being evaluated as `foo`. If in doubt, just diff --git a/docs/input/docs/learn/intro-to-semver.md b/docs/input/docs/learn/intro-to-semver.md index 179010169c..43a73646bf 100644 --- a/docs/input/docs/learn/intro-to-semver.md +++ b/docs/input/docs/learn/intro-to-semver.md @@ -16,12 +16,12 @@ Version Promiscuity is the opposite problem, **JsonLibrary** releases _v1.1.0_ w SemVer introduces conventions about breaking changes into our version numbers so we can safely upgrade dependencies without fear of unexpected, breaking changes while still allowing us to upgrade downstream libraries to get new features and bug fixes. The convention is quite simple: -* `{major}.{minor}.{patch}-{tag}+{buildmetadata}` -* `{major}` is only incremented if the release has breaking changes (includes bug fixes which have breaking behavioural changes -* `{minor}` is incremented if the release has new non-breaking features -* `{patch}` is incremented if the release only contains non-breaking bug fixes -* `{tag}` is optional and denotes a pre-release of the version preceding -* `{buildmetadata}` is optional and contains additional information about the version, but **does not affect** the semantic version preceding it. +* `{major}.{minor}.{patch}-{tag}+{buildmetadata}` +* `{major}` is only incremented if the release has breaking changes (includes bug fixes which have breaking behavioural changes +* `{minor}` is incremented if the release has new non-breaking features +* `{patch}` is incremented if the release only contains non-breaking bug fixes +* `{tag}` is optional and denotes a pre-release of the version preceding +* `{buildmetadata}` is optional and contains additional information about the version, but **does not affect** the semantic version preceding it. Only one number should be incremented per release, and all lower parts should be reset to 0 (if `{major}` is incremented, then `{minor}` and `{patch}` should become 0). diff --git a/docs/input/docs/learn/who.md b/docs/input/docs/learn/who.md index bbcaba18a8..ace607d739 100644 --- a/docs/input/docs/learn/who.md +++ b/docs/input/docs/learn/who.md @@ -8,19 +8,19 @@ Various people are actively using GitVersion, and taking advantage of the automatic generation of their version numbers. Here is a list of applications that we know about today. -* [Catel](https://github.com/catel/catel) -* [ChocolateyGUI](https://github.com/chocolatey/ChocolateyGUI) -* [GitLink](https://github.com/GitTools/GitLink) -* [OctopusDeploy](https://github.com/OctopusDeploy) -* [NUKE](https://nuke.build) -* [Orc.\* packages](https://github.com/wildgums?query=orc) -* [Orchestra](https://github.com/wildgums/orchestra) -* [Shouldly](https://github.com/shouldly/shouldly) -* [Akavache](https://github.com/akavache/akavache) -* [Splat](https://github.com/paulcbetts/splat) -* [ReactiveUI](https://github.com/reactiveui/reactiveui) -* [Uno Platform](https://platform.uno/) -* [Fluent Assertions](https://fluentassertions.com) +* [Catel](https://github.com/catel/catel) +* [ChocolateyGUI](https://github.com/chocolatey/ChocolateyGUI) +* [GitLink](https://github.com/GitTools/GitLink) +* [OctopusDeploy](https://github.com/OctopusDeploy) +* [NUKE](https://nuke.build) +* [Orc.\* packages](https://github.com/wildgums?query=orc) +* [Orchestra](https://github.com/wildgums/orchestra) +* [Shouldly](https://github.com/shouldly/shouldly) +* [Akavache](https://github.com/akavache/akavache) +* [Splat](https://github.com/paulcbetts/splat) +* [ReactiveUI](https://github.com/reactiveui/reactiveui) +* [Uno Platform](https://platform.uno/) +* [Fluent Assertions](https://fluentassertions.com) If you are using GitVersion in your projects, and you are not listed above, please feel free to add a link to your project. diff --git a/docs/input/docs/learn/why.md b/docs/input/docs/learn/why.md index 421db61eee..a87ef0cc3a 100644 --- a/docs/input/docs/learn/why.md +++ b/docs/input/docs/learn/why.md @@ -11,28 +11,28 @@ transportable between projects. It solves: -* Rebuilding tags always produces the same version -* Not having to rebuild to increment versions -* Not duplicating version information in multiple places (branch release/2.0.0 +* Rebuilding tags always produces the same version +* Not having to rebuild to increment versions +* Not duplicating version information in multiple places (branch release/2.0.0 already has the version in it, why do I need to change something else) -* Each branch calculates its SemVer and versions flow between branches when +* Each branch calculates its SemVer and versions flow between branches when they are merged -* Pull requests produce unique pre-release version numbers -* NuGet semver issues -* Build server integration -* Updating assembly info -* And a whole lot of edge cases you don't want to think about +* Pull requests produce unique pre-release version numbers +* NuGet semver issues +* Build server integration +* Updating assembly info +* And a whole lot of edge cases you don't want to think about ## Advantages vs other approaches ### Version.txt/Version in build script -* With version.txt/build script, after the release you need to do an additional commit to bump the version -* After tagging a release, the next build will still be the same version +* With version.txt/build script, after the release you need to do an additional commit to bump the version +* After tagging a release, the next build will still be the same version ### Build Server versioning -* Cannot have different version numbers on different branches -* Rebuilding will result in a different build number (if using an auto incrementing number in the version) -* Need to login to the build server to change version number -* Only build administrators can change the version number +* Cannot have different version numbers on different branches +* Rebuilding will result in a different build number (if using an auto incrementing number in the version) +* Need to login to the build server to change version number +* Only build administrators can change the version number diff --git a/docs/input/docs/reference/build-servers/appveyor.md b/docs/input/docs/reference/build-servers/appveyor.md index d23f0da61d..2232c49a15 100644 --- a/docs/input/docs/reference/build-servers/appveyor.md +++ b/docs/input/docs/reference/build-servers/appveyor.md @@ -8,8 +8,8 @@ RedirectFrom: docs/build-server-support/build-server/appveyor AppVeyor is the first build server which has a setup helper built into `GitVersion init`. -1. Run `GitVersion init` -2. Choose `Setup build scripts` (currently option 7, but that could change) -3. Choose `AppVeyor` -4. Follow the prompts to generate an AppVeyor.yml file which works nicely with +1. Run `GitVersion init` +2. Choose `Setup build scripts` (currently option 7, but that could change) +3. Choose `AppVeyor` +4. Follow the prompts to generate an AppVeyor.yml file which works nicely with GitVersion diff --git a/docs/input/docs/reference/build-servers/azure-devops.md b/docs/input/docs/reference/build-servers/azure-devops.md index 15fba0b50b..3f548d18a4 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). diff --git a/docs/input/docs/reference/build-servers/bamboo.md b/docs/input/docs/reference/build-servers/bamboo.md index 71e0ad3ae1..6d0d79a263 100644 --- a/docs/input/docs/reference/build-servers/bamboo.md +++ b/docs/input/docs/reference/build-servers/bamboo.md @@ -36,6 +36,6 @@ sed -i '1d;$ d;s/ //;s/"//g;s/,//;s/:/=/' gitversion.txt **Required Properties** -* **Path to properties file**: gitversion.txt -* **Namespace**: GitVersion -* **Scope of the Variables**: Result +* **Path to properties file**: gitversion.txt +* **Namespace**: GitVersion +* **Scope of the Variables**: Result 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..5bae6a9729 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 @@ -10,8 +10,9 @@ If you use [Buildkite][buildkite] then you will have to use GitVersion from the ## Gotchas By default Buildkite calls `git fetch` with the flags `-v --prune` which can cause issues on new build agents since branches or tags might not be available locally on the build agent when GitVersion runs. This can be fixed by altering the [Buildkite agent configuration][configuration] either by: -* Setting the environment variable `BUILDKITE_GIT_FETCH_FLAGS` to `-v --tags` -* Setting configuration value `git-fetch-flags` to `-v --tags` in your agent configuration file + +* Setting the environment variable `BUILDKITE_GIT_FETCH_FLAGS` to `-v --tags` +* Setting configuration value `git-fetch-flags` to `-v --tags` in your agent configuration file If you are running GitVersion in a docker container make sure to propagate the `BUILDKITE`, `BUILDKITE_BRANCH`, and `BUILDKITE_PULL_REQUEST` environment variables (c.f. example below). diff --git a/docs/input/docs/reference/build-servers/continua.md b/docs/input/docs/reference/build-servers/continua.md index 3605084d18..eefe6048df 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 @@ -13,29 +13,29 @@ This guide assumes a few variables are present in the configuration. Note that this example uses `Catel` as repository name, but it should be replaced by the name of the repository where GitVersion is running against. -* RepositoryBranchName => $Source.Catel.BranchName$ -* RepositoryCommitId => $Source.Catel.LatestChangeset.Id$ -* RepositoryName => Catel -* RepositoryName => $Source.Catel.Path$ -* RepositoryUrl => $Source.Catel.Url$ +* RepositoryBranchName => $Source.Catel.BranchName$ +* RepositoryCommitId => $Source.Catel.LatestChangeset.Id$ +* RepositoryName => Catel +* RepositoryName => $Source.Catel.Path$ +* RepositoryUrl => $Source.Catel.Url$ It also requires a few variables which will automatically be filled by GitVersion. The example below are just a few, any of the GitVersion variables written to the output can be used. -* GitVersion_FullSemVer -* GitVersion_MajorMinorPatch -* GitVersion_NuGetVersion +* GitVersion_FullSemVer +* GitVersion_MajorMinorPatch +* GitVersion_NuGetVersion You also need to add a property collector for the agents to detect the GitVersion tool on the agents: -* Namespace => GitVersion -* Run On => Agent -* Type => Path Finder Plugin -* Property Name => Path -* Executable => GitVersion.exe -* Search paths => your installation folder (e.g. `C:\Tools\GitVersion` or if you +* Namespace => GitVersion +* Run On => Agent +* Type => Path Finder Plugin +* Property Name => Path +* Executable => GitVersion.exe +* Search paths => your installation folder (e.g. `C:\Tools\GitVersion` or if you are using Chocolatey `C:\ProgramData\chocolatey\lib\GitVersion.Portable\tools`) ## Basic Usage @@ -43,17 +43,17 @@ GitVersion tool on the agents: To run GitLink inside [Continua CI](https://www.finalbuilder.com/continua-ci), follow the steps below: -* Add a new `Execute Program` step to a stage -* In the `Execute Program` tab, set the following values: - * Executable path: $Agent.GitVersion.Path$ - * Working directory: %RepositoryPath% -* In the `Arguments` tab, set the following values: - * Arguments: /url %RepositoryUrl% /b %RepositoryBranchName% /c %RepositoryCommitId% /output buildserver -* In the `Options` tab, set the following values: - * Wait for completion: checked - * Log output: checked - * Check program exit code: checked - * Exit code must be: equal to - * Exit code: 0 +* Add a new `Execute Program` step to a stage +* In the `Execute Program` tab, set the following values: + * Executable path: $Agent.GitVersion.Path$ + * Working directory: %RepositoryPath% +* In the `Arguments` tab, set the following values: + * Arguments: /url %RepositoryUrl% /b %RepositoryBranchName% /c %RepositoryCommitId% /output buildserver +* In the `Options` tab, set the following values: + * Wait for completion: checked + * Log output: checked + * Check program exit code: checked + * Exit code must be: equal to + * Exit code: 0 Now GitVersion will automatically run and fill the `GitVersion_` variables. 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..d19e4489a5 --- /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). diff --git a/docs/input/docs/reference/build-servers/gitlab.md b/docs/input/docs/reference/build-servers/gitlab.md index b9495856e7..9a03ac25b8 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 @@ -13,16 +13,16 @@ A working example of integrating GitVersion with GitLab is maintained in the pro Here is a summary of what it demonstrated (many more details in the [Readme][readme]) -- Is a reusable working example known as a Guided Exploration ([Guided Exploration Manifesto][guided-exploration-manifesto]) - so job logs and package artifacts can be reviewed. The project can also be imported to your own GitLab group or instance as a starting point for your own work. -- IMPORTANT: It demonstrates how to override GitLab CI's default cloning behavior so that GitVersion can do a dynamic copy. Selectively clones GitVersion.yml so that these settings take effect. This best practice demonstrates the best way to do this while avoiding a double-cloning of the project (once by GitLab Runner and once by GitVersion). -- Implements GitVersion as a CI/CD Extension that can be reused across many projects using includes. -- Implements GitVersion as a single job that runs the GitVersion container and passes the version number downstream into both _pipeline_ and _job_ level variables, which means... -- It can be used with ANY coding language, framework or packaging engine. -- Generates example packaged artifacts: - - Two ways of building Sem Versioned NuGet packages (msbuild-ish and nuget.exe-ish) and uploads them and tests them from a [GitLab NuGet Repository][gitlab-nuget-repository]. - - A Sem Versioned [GitLab Generic Package][gitlab-generic-package] - - A Sem Versioned docker container and uploads to [GitLab Container Registry][gitlab-container-registry]. -- It creates a Sem Versioned [GitLab Release][gitlab-release-help] and Git tag using the [GitLab Release Cli][gitlab-release-cli] and links the generic package as evidence. +- Is a reusable working example known as a Guided Exploration ([Guided Exploration Manifesto][guided-exploration-manifesto]) - so job logs and package artifacts can be reviewed. The project can also be imported to your own GitLab group or instance as a starting point for your own work. +- IMPORTANT: It demonstrates how to override GitLab CI's default cloning behavior so that GitVersion can do a dynamic copy. Selectively clones GitVersion.yml so that these settings take effect. This best practice demonstrates the best way to do this while avoiding a double-cloning of the project (once by GitLab Runner and once by GitVersion). +- Implements GitVersion as a CI/CD Extension that can be reused across many projects using includes. +- Implements GitVersion as a single job that runs the GitVersion container and passes the version number downstream into both _pipeline_ and _job_ level variables, which means... +- It can be used with ANY coding language, framework or packaging engine. +- Generates example packaged artifacts: + - Two ways of building Sem Versioned NuGet packages (msbuild-ish and nuget.exe-ish) and uploads them and tests them from a [GitLab NuGet Repository][gitlab-nuget-repository]. + - A Sem Versioned [GitLab Generic Package][gitlab-generic-package] + - A Sem Versioned docker container and uploads to [GitLab Container Registry][gitlab-container-registry]. +- It creates a Sem Versioned [GitLab Release][gitlab-release-help] and Git tag using the [GitLab Release Cli][gitlab-release-cli] and links the generic package as evidence. [gitlab-generic-package]: https://docs.gitlab.com/ee/user/packages/generic_packages/ [gitlab-nuget-repository]: https://docs.gitlab.com/ee/user/packages/nuget_repository/ diff --git a/docs/input/docs/reference/build-servers/jenkins.md b/docs/input/docs/reference/build-servers/jenkins.md index 46b6355a29..19669ee20f 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 @@ -9,13 +9,13 @@ RedirectFrom: docs/build-server-support/build-server/jenkins When setting up a Jenkins project for GitVersion, it is necessary to add a few _Behaviors_ to the SCM settings to ensure that GitVersion has enough information: -* Advanced clone behaviors - * Enable `Fetch tags` - * Enable `Honor refspec on intial clone` -* Check out to matching local branch -* Prune stale remote-tracking branches -* Specify ref specs - * Ref Spec: `+refs/heads/*:refs/remotes/@{remote}/*` +* Advanced clone behaviors + * Enable `Fetch tags` + * Enable `Honor refspec on intial clone` +* Check out to matching local branch +* Prune stale remote-tracking branches +* Specify ref specs + * Ref Spec: `+refs/heads/*:refs/remotes/@{remote}/*` ## Usage @@ -30,9 +30,9 @@ Jenkins plugins exist that provide this functionality. Of these plugins To inject the GitVersion variables as environment variables for a build job using [EnvInject][env-inject], do the following: -1. Add an **Execute Windows batch command** build step with _Command_: +1. Add an **Execute Windows batch command** build step with _Command_: `gitversion /output buildserver` -2. Add an **Inject environment variables** build step and use value +2. Add an **Inject environment variables** build step and use value 'gitversion.properties' for the _Properties File Path_ parameter This assumes GitVersion.exe is available on the command line. @@ -55,13 +55,13 @@ For pipeline projects, GitVersion variables can be accessed by reading the `gitv In a pipeline stage: -1. Run GitVersion with the flag for _buildserver_ output (this only works when run from Jenkins, specifically when the `JENKINS_URL` environment variable is defined): +1. Run GitVersion with the flag for _buildserver_ output (this only works when run from Jenkins, specifically when the `JENKINS_URL` environment variable is defined): ```groovy sh 'gitversion /output buildserver'` ``` -2. Add a script block to read the properties file, assign environment variables as needed: +2. Add a script block to read the properties file, assign environment variables as needed: ```groovy script { diff --git a/docs/input/docs/reference/build-servers/myget.md b/docs/input/docs/reference/build-servers/myget.md index 383d61408a..c2d34846c2 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 @@ -8,18 +8,18 @@ RedirectFrom: docs/build-server-support/build-server/myget MyGet Build Services has built-in support for GitVersion and is encouraging you to leverage GitVersion + GitFlow to produce Semantically Versioned packages. -* Create a [custom build script](https://docs.myget.org/docs/reference/custom-build-scripts): +* Create a [custom build script](https://docs.myget.org/docs/reference/custom-build-scripts): we advise to run a tool like GitVersion in a _pre-build_ script, so that it can set additional environment variables for the actual build script. MyGet [by convention](https://docs.myget.org/docs/reference/build-services#Pre-\_and_post-build_steps) automatically picks up any of the following file names as pre-build script: - * `pre-build.(bat|cmd|ps1)` - * `pre-myget.(bat|cmd|ps1)` -* Run `GitVersion /output buildserver`: this will cause MyGet Build Services to + * `pre-build.(bat|cmd|ps1)` + * `pre-myget.(bat|cmd|ps1)` +* Run `GitVersion /output buildserver`: this will cause MyGet Build Services to set the current `%PackageVersion%` value to the NuGet-compatible SemVer generated by GitVersion and apply this [MyGet Environment Variable](https://docs.myget.org/docs/reference/build-services#Available_Environment_Variables) wherever it is used during the build process. -* Ensure the build script has been pushed to your source repository root. Done :) +* Ensure the build script has been pushed to your source repository root. Done :) :::{.alert .alert-info} **Note** diff --git a/docs/input/docs/reference/build-servers/octopus-deploy.md b/docs/input/docs/reference/build-servers/octopus-deploy.md index 79ce4035cd..bbc38962b4 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 @@ -35,15 +35,15 @@ depending on which build server you have this approach may or may not work for you. For instance in TFS Build vNext you cannot chain builds to publish artifacts built in one build in another. -1. Your CI build creates the stable NuGet package +1. Your CI build creates the stable NuGet package -* Do _not_ publish this package into the Octopus nuget feed + * Do _not_ publish this package into the Octopus nuget feed -2. When you want to push a package into the Octopus deployment pipeline you trigger the second build +2. When you want to push a package into the Octopus deployment pipeline you trigger the second build -* it will either take the package built from the first build in the chain (your CI build?) or rebuild -* It will publish that package into the Octopus deploy feed -* The build then is _tagged_ with the version, this will cause GitVersion to increment the version + * it will either take the package built from the first build in the chain (your CI build?) or rebuild + * It will publish that package into the Octopus deploy feed + * The build then is _tagged_ with the version, this will cause GitVersion to increment the version This means that CI builds are _not_ available to Octopus deploy, there will be a manual build in your _build server_ which pushes the package to Octopus deploy. @@ -52,14 +52,14 @@ manual build in your _build server_ which pushes the package to Octopus deploy. Another simple option is to tag a stable version to release, the basic idea is: -1. GitVersion is set to continuous deployment mode, so main will create `-ci.x` +1. GitVersion is set to continuous deployment mode, so main will create `-ci.x` pre-release builds -2. CI Builds only create NuGet packages for stable builds -3. You tag main with a stable version of the next version then push it -4. The CI build triggers, GitVersion will always respect tags so you will get a +2. CI Builds only create NuGet packages for stable builds +3. You tag main with a stable version of the next version then push it +4. The CI build triggers, GitVersion will always respect tags so you will get a stable version -5. The stable package will be pushed to Octopus -6. Because of the tag, then next build will be incremented and will be producing +5. The stable package will be pushed to Octopus +6. Because of the tag, then next build will be incremented and will be producing pre-release packages of the next build #### Script to create the release diff --git a/docs/input/docs/reference/build-servers/teamcity.md b/docs/input/docs/reference/build-servers/teamcity.md index 55d663cc8d..371bd3106e 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 @@ -9,10 +9,10 @@ RedirectFrom: docs/build-server-support/build-server/teamcity In [TeamCity][teamcity] you can create a build step as follows: -* **Runner type:** Command Line -* **Run:** Executable with parameters -* **Command executable:** `GitVersion.exe` -* **Command parameters:** `/output buildserver /updateassemblyinfo true` +* **Runner type:** Command Line +* **Run:** Executable with parameters +* **Command executable:** `GitVersion.exe` +* **Command parameters:** `/output buildserver /updateassemblyinfo true` Then in your build parameters simply [add a placeholder](#nuget-in-teamcity) of the GitVersion variables you would like to use. @@ -61,23 +61,23 @@ See [dynamic repositories][dynamic-repo] for more info. ### Output -* We update the TC build number to the GitVersion number automatically -* We output the individual values of the GitVersion version variables as build +* We update the TC build number to the GitVersion number automatically +* We output the individual values of the GitVersion version variables as build parameters with format `GitVersion.*` (Eg: `GitVersion.Major`) if you need access to them in your build script. Being system variables they will be passed as msbuild/environmental variables to other build steps ### NuGet in TeamCity -* Add a dummy [parameter][parameter] to the project called `GitVersion.NuGetVersion`. If +* Add a dummy [parameter][parameter] to the project called `GitVersion.NuGetVersion`. If many of your projects uses git-flow and SemVer you can add the parameter to the "root-project" (TeamCity 8.x+). You need a dummy param because GitVersion creates the variables at runtime, and you cannot reference a parameter which is not available statically. GitVersion will overwrite the dummy value. -* Then setup you nuget pack build set the "version" to +* Then setup you nuget pack build set the "version" to `%GitVersion.NuGetVersion%`. -* If you do your pack in a build script then you can just use environmental +* If you do your pack in a build script then you can just use environmental variables because teamcity will pass them through automatically. ### When TeamCity -> GitHub can't use https @@ -101,7 +101,7 @@ Sorry ## Guides -* [Continuous Delivery Setup in TeamCity][cd] +* [Continuous Delivery Setup in TeamCity][cd] [cd]: https://jake.ginnivan.net/blog/2014/07/09/my-typical-teamcity-build-setup [dynamic-repo]: /docs/learn/dynamic-repositories diff --git a/docs/input/docs/reference/configuration.md b/docs/input/docs/reference/configuration.md index 6db30871b3..35e874cd32 100644 --- a/docs/input/docs/reference/configuration.md +++ b/docs/input/docs/reference/configuration.md @@ -8,16 +8,6 @@ RedirectFrom: docs/configuration GitVersion, starting from version 3.0, is mainly powered by configuration and no longer has branching strategies hard-coded. -## Configuration tool - -If you run `gitversion init`, GitVersion will launch into a configuration tool, -which can help you configure GitVersion the way you want it. - -Once complete, the `init` command will create a `GitVersion.yml` file in the -working directory. It can be the root repository directory or any subdirectory -in case you have a single repository for more than one project or are restricted -to commit into a subdirectory. - :::{.alert .alert-info} **Note** @@ -31,41 +21,438 @@ 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) +- TrunkBased (TrunkBased/preview1) + +Example of using a `GitHubFlow` workflow with a different `tag-prefix`: ```yaml -next-version: 1.0 +workflow: GitHubFlow/v1 +tag-prefix: '[abc]' +``` + +The built-in configuration for the `GitFlow` workflow (`workflow: GitFlow/v1`) looks like: + + + +```yml assembly-versioning-scheme: MajorMinorPatch assembly-file-versioning-scheme: MajorMinorPatch -assembly-informational-format: '{InformationalVersion}' +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: + mode: ContinuousDelivery + 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 -continuous-delivery-fallback-tag: ci -tag-prefix: '[vV]' +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 +``` +snippet source | anchor + + +The supported built-in configuration for the `GitHubFlow` workflow (`workflow: GitHubFlow/v1`) looks like: + + + +```yml +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)' -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: + 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: 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 + track-merge-message: true + regex: ^features?[/-](?.+) + source-branches: + - main + - release + 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: + - main + - release + - feature + is-source-branch-for: [] + pre-release-weight: 30000 + unknown: + mode: ManualDeployment + label: '{BranchName}' + increment: Inherit + prevent-increment: + when-current-commit-tagged: false + track-merge-message: false + regex: (?.+) + source-branches: + - main + - release + - feature + - pull-request + 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 +``` +snippet source | anchor + + +The preview built-in configuration (experimental usage only) for the `TrunkBased` workflow (`workflow: TrunkBased/preview1`) looks like: + + + +```yml +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: +- ConfiguredNextVersion +- Mainline +branches: + main: + mode: ContinuousDeployment + 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 + feature: + mode: ContinuousDelivery + label: '{BranchName}' + increment: Minor + prevent-increment: + when-current-commit-tagged: false + track-merge-message: true + regex: ^features?[/-](?.+) + source-branches: + - main + is-source-branch-for: [] + is-main-branch: false + pre-release-weight: 30000 + hotfix: + mode: ContinuousDelivery + label: '{BranchName}' + increment: Patch + prevent-increment: + when-current-commit-tagged: false + regex: ^hotfix(es)?[/-](?.+) + source-branches: + - main + is-source-branch-for: [] + is-release-branch: 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+)' + track-merge-message: true + regex: ^(pull|pull\-requests|pr)[/-] + source-branches: + - main + - feature + - hotfix + is-source-branch-for: [] + pre-release-weight: 30000 + unknown: + increment: Patch + prevent-increment: + when-current-commit-tagged: false + regex: (?.+) + source-branches: + - main + is-source-branch-for: [] + 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: '' +source-branches: [] +is-source-branch-for: [] +tracks-release-branches: false +is-release-branch: false +is-main-branch: false ``` +snippet source | anchor + 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 +519,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 +528,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 +566,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 +575,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,14 +633,14 @@ 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: -* `SourceBranch` - Identifies the source branch of the merge -* `TargetBranch` - Identifies the target branch of the merge -* `PullRequestNumber` - Captures the pull-request number +- `SourceBranch` - Identifies the source branch of the merge +- `TargetBranch` - Identifies the target branch of the merge +- `PullRequestNumber` - Captures the pull-request number Custom merge message formats are evaluated _before_ any built in formats. Support for [Conventional Commits][conventional-commits] can be @@ -311,87 +668,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 ``` @@ -406,6 +748,8 @@ values, but here they are if you need to: This is the regex which is used to match the current branch to the correct 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 Because Git commits only refer to parent commits (not branches) GitVersion @@ -424,16 +768,16 @@ Take this commit graph By looking at this graph, you cannot tell which of these scenarios happened: -* feature/foo branches off release/v1.0.0 - * Branch release/v1.0.0 from main - * Branch feature/foo from release/v1.0.0 - * Add a commit to both release/v1.0.0 and feature/foo - * release/v1.0.0 is the base for feature/foo -* release/v1.0.0 branches off feature/foo - * Branch feature/foo from main - * Branch release/v1.0.0 from feature/foo - * Add a commit to both release/v1.0.0 and feature/foo - * feature/foo is the base for release/v1.0.0 +- feature/foo branches off release/v1.0.0 + - Branch release/v1.0.0 from main + - Branch feature/foo from release/v1.0.0 + - Add a commit to both release/v1.0.0 and feature/foo + - release/v1.0.0 is the base for feature/foo +- release/v1.0.0 branches off feature/foo + - Branch feature/foo from main + - Branch release/v1.0.0 from feature/foo + - Add a commit to both release/v1.0.0 and feature/foo + - feature/foo is the base for release/v1.0.0 Or put more simply, you cannot tell which branch was created first, `release/v1.0.0` or `feature/foo`. @@ -474,7 +818,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 +834,25 @@ The header for all the individual branch configuration. Same as for the [global configuration, explained above](#mode). -### tag +### label -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}`. +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). -**Note:** To clear a default use an empty string: `tag: ''` +For example: branch `feature/foo` would become a pre-release label +of `alpha.foo` with `label: 'alpha.{BranchName}'` and `regex: '^features?[/-](?.+)'`. + +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: `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 +863,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 +889,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 +916,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,12 +934,36 @@ 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` + +``` log +1.2-alpha4 +01.02.03-rc03 +1.2.3.4 +``` + +### 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 + [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 [conventional-commits-config]: /docs/reference/version-increments#conventional-commit-messages [conventional-commits]: https://www.conventionalcommits.org/ -[installing]: /docs/usage/cli/installation [modes]: /docs/reference/modes [variables]: /docs/reference/variables [version-sources]: /docs/reference/version-sources diff --git a/docs/input/docs/reference/mdsource/configuration.source.md b/docs/input/docs/reference/mdsource/configuration.source.md new file mode 100644 index 0000000000..74b76fa054 --- /dev/null +++ b/docs/input/docs/reference/mdsource/configuration.source.md @@ -0,0 +1,570 @@ +--- +Order: 10 +Title: Configuration +Description: Details about how GitVersion can be configured to suit your needs +RedirectFrom: docs/configuration +--- + +GitVersion, starting from version 3.0, is mainly powered by configuration and no +longer has branching strategies hard-coded. + +:::{.alert .alert-info} +**Note** + +GitVersion ships with internal default configuration which works with +GitHubFlow and GitFlow, probably with others too. +::: + +The `develop` branch is set to `ContinuousDeployment` mode by default as we have +found that is generally what is needed when using GitFlow. + +To see the effective configuration (defaults and overrides), you can run +`gitversion /showConfig`. + +## Global configuration + +The following supported workflow configurations are available in GitVersion and can be referenced by the workflow property: + +- GitFlow (GitFlow/v1) +- GitHubFlow (GitHubFlow/v1) +- TrunkBased (TrunkBased/preview1) + +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: + +snippet: /docs/workflows/GitFlow/v1.yml + +The supported built-in configuration for the `GitHubFlow` workflow (`workflow: GitHubFlow/v1`) looks like: + +snippet: /docs/workflows/GitHubFlow/v1.yml + +The preview built-in configuration (experimental usage only) for the `TrunkBased` workflow (`workflow: TrunkBased/preview1`) looks like: + +snippet: /docs/workflows/TrunkBased/preview1.yml + +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 +feature branch with breaking changes (i.e., a major increment), indicating what +the next `git tag` is going to be. + +`next-version` is not a permanent replacement for `git tag` and should only be +used intermittently. Since version 5.5 GitVersion supports `next-version` with +`mode: Mainline` and should not be treated as a "base version". + +If you are using `next-version` and are experiencing weird versioning behaviour, +please remove it, create a `git tag` with an appropriate version number on an +appropriate historical commit and see if that resolves any versioning issues +you may have. + +### assembly-versioning-scheme + +When updating assembly info, `assembly-versioning-scheme` tells GitVersion how +to treat the `AssemblyVersion` attribute. Useful to lock the major when using +Strong Naming. Note: you can use `None` to skip updating the `AssemblyVersion` +while still updating the `AssemblyFileVersion` and `AssemblyInformationVersion` +attributes. Valid values: `MajorMinorPatchTag`, `MajorMinorPatch`, `MajorMinor`, +`Major`, `None`. + +### assembly-file-versioning-scheme + +When updating assembly info, `assembly-file-versioning-scheme` tells GitVersion +how to treat the `AssemblyFileVersion` attribute. Note: you can use `None` to +skip updating the `AssemblyFileVersion` while still updating the +`AssemblyVersion` and `AssemblyInformationVersion` attributes. Valid values: +`MajorMinorPatchTag`, `MajorMinorPatch`, `MajorMinor`, `Major`, `None`. + +### assembly-file-versioning-format + +Specifies the format of `AssemblyFileVersion` and +overwrites the value of `assembly-file-versioning-scheme`. + +Expressions in curly braces reference one of the [variables][variables] +or a process-scoped environment variable (when prefixed with `env:`). For example, + +```yaml +# use a variable if non-null or a fallback value otherwise +assembly-file-versioning-format: '{Major}.{Minor}.{Patch}.{WeightedPreReleaseNumber ?? 0}' + +# use an environment variable or raise an error if not available +assembly-file-versioning-format: '{Major}.{Minor}.{Patch}.{env:BUILD_NUMBER}' + +# use an environment variable if available or a fallback value otherwise +assembly-file-versioning-format: '{Major}.{Minor}.{Patch}.{env:BUILD_NUMBER ?? 42}' +``` + +### assembly-versioning-format + +Specifies the format of `AssemblyVersion` and +overwrites the value of `assembly-versioning-scheme`. +Follows the same formatting semantics as `assembly-file-versioning-format`. + +### assembly-informational-format + +Specifies the format of `AssemblyInformationalVersion`. +Follows the same formatting semantics as `assembly-file-versioning-format`. +The default value is `{InformationalVersion}`. + +### mode + +Sets the `mode` of how GitVersion should create a new version. Read more at +[deployment modes][modes]. + +### increment + +The part of the SemVer to increment when GitVersion detects it needs to be +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) or other branch related properties. + +### tag-prefix + +A regular expression which is used to trim Git tags before processing (e.g., +v1.0.0). The default value is `[vV]`. + +### version-in-branch-pattern + +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 + +The regex to match commit messages with to perform a major version increment. +Default set to `'\+semver:\s?(breaking|major)'`, which will match occurrences of +`+semver: major` and `+semver: breaking` in a commit message. + +### minor-version-bump-message + +The regex to match commit messages with to perform a minor version increment. +Default set to `'\+semver:\s?(feature|minor)'`, which will match occurrences of +`+semver: feature` and `+semver: minor` in a commit message. + +### patch-version-bump-message + +The regex to match commit messages with to perform a patch version increment. +Default set to `'\+semver:\s?(fix|patch)'`, which will match occurrences of +`+semver: fix` and `+semver: patch` in a commit message. + +### no-bump-message + +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` + +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 + +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 utilize this parameter to produce a +monotonically increasing build number. + +### commit-message-incrementing + +Sets whether it should be possible to increment the version with special syntax +in the commit message. See the `*-version-bump-message` options above for +details on the syntax. Default set to `Enabled`; set to `Disabled` to disable. + +### commit-date-format + +Sets the format which will be used to format the `CommitDate` output variable. + +### ignore + +The header property for the `ignore` configuration. + +:::{.alert .alert-info} +**Note:** When ignoring a commit or a range of commits, they are only ignored in +the search for a [version source][version-sources], not when calculating other +parts of the version number, such as build metadata. +::: + +#### sha + +A sequence of SHAs to be excluded from the version calculations. Useful when +there is a rogue commit in history yielding a bad version. You can use either +style below: + +```yaml +ignore: + sha: [e7bc24c0f34728a25c9187b8d0b041d935763e3a, 764e16321318f2fdb9cdeaa56d1156a1cba307d7] +``` + +or + +```yaml +ignore: + sha: + - e7bc24c0f34728a25c9187b8d0b041d935763e3a + - 764e16321318f2fdb9cdeaa56d1156a1cba307d7 +``` + +#### commits-before + +Date and time in the format `yyyy-MM-ddTHH:mm:ss` (eg `commits-before: +2015-10-23T12:23:15`) to setup an exclusion range. Effectively any commit before +`commits-before` will be ignored. + +### merge-message-formats + +Custom merge message formats to enable identification of merge messages that do not +follow the built-in conventions. Entries should be added as key-value pairs where +the value is a regular expression. +e.g. + +```yaml +merge-message-formats: + tfs: '^Merged (?:PR (?\d+)): Merge (?.+) to (?.+)' +``` + +The regular expression should contain the following capture groups: + +- `SourceBranch` - Identifies the source branch of the merge +- `TargetBranch` - Identifies the target branch of the merge +- `PullRequestNumber` - Captures the pull-request number + +Custom merge message formats are evaluated _before_ any built in formats. +Support for [Conventional Commits][conventional-commits] can be +[configured][conventional-commits-config]. + +### update-build-number + +Configures GitVersion to update the build number or not when running on a build server. + +## Branch configuration + +Then we have branch specific configuration, which looks something like this: + +:::{.alert .alert-info} +**Note** + +v4 changed from using regexes for keys, to named configs +::: + +If you have branch specific configuration upgrading to v4 will force you to +upgrade. + +```yaml +branches: + main: + regex: ^master$|^main$ + mode: ContinuousDelivery + 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-main-branch: true + pre-release-weight: 55000 + develop: + regex: ^dev(elop)?(ment)?$ + mode: ContinuousDeployment + 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-main-branch: false + pre-release-weight: 0 + release: + regex: ^releases?[/-] + mode: ContinuousDelivery + 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-main-branch: false + pre-release-weight: 30000 + feature: + regex: ^features?[/-] + mode: ContinuousDelivery + label: '{BranchName}' + increment: Inherit + source-branches: [ 'develop', 'main', 'release', 'feature', 'support', 'hotfix' ] + pre-release-weight: 30000 + pull-request: + regex: ^(pull|pull\-requests|pr)[/-] + mode: ContinuousDelivery + label: PullRequest + increment: Inherit + label-number-pattern: '[/-](?\d+)[-/]' + source-branches: [ 'develop', 'main', 'release', 'feature', 'support', 'hotfix' ] + pre-release-weight: 30000 + hotfix: + regex: ^hotfix(es)?[/-] + mode: ContinuousDelivery + label: beta + increment: Inherit + source-branches: [ 'release', 'main', 'support', 'hotfix' ] + pre-release-weight: 30000 + support: + regex: ^support[/-] + mode: ContinuousDelivery + 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-main-branch: true + pre-release-weight: 55000 +``` + +If you don't specify the regex, the built-in for that branch config will be +used (recommended). + +We don't envision many people needing to change most of these configuration +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. + +[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 + +Because Git commits only refer to parent commits (not branches) GitVersion +sometimes cannot tell which branch the current branch was branched from. + +Take this commit graph + +```shell +* release/v1.0.0 * feature/foo +| ________________/ +|/ +* +* +* (main) +``` + +By looking at this graph, you cannot tell which of these scenarios happened: + +- feature/foo branches off release/v1.0.0 + - Branch release/v1.0.0 from main + - Branch feature/foo from release/v1.0.0 + - Add a commit to both release/v1.0.0 and feature/foo + - release/v1.0.0 is the base for feature/foo +- release/v1.0.0 branches off feature/foo + - Branch feature/foo from main + - Branch release/v1.0.0 from feature/foo + - Add a commit to both release/v1.0.0 and feature/foo + - feature/foo is the base for release/v1.0.0 + +Or put more simply, you cannot tell which branch was created first, +`release/v1.0.0` or `feature/foo`. + +To resolve this issue, we give GitVersion a hint about our branching workflows +by telling it what types of branches a branch can be created from. For example, +feature branches are, by default, configured to have the following source +branches: + +`source-branches: ['main', 'develop', 'feature', 'hotfix', 'support']` + +This means that we will never bother to evaluate pull request branches as merge +base options and being explicit in this way also improves the performance of +GitVersion. + +### is-source-branch-for + +The reverse of `source-branches`. This property was introduced to keep it easy +to extend GitVersion's config. + +It exists to make it easier to extend GitVersion's configuration. If only +`source-branches` exists and you add a new branch type, for instance +`unstable/`, you then need to re-define the `source-branches` configuration +value for existing branches (like feature/) to now include the new unstable +branch. + +A complete example: + +```yaml +branches: + unstable: + regex: ... + is-source-branch-for: ['main', 'develop', 'feature', 'hotfix', 'support'] +``` + +Without this configuration value you would have to do: + +```yaml +branches: + unstable: + regex: + feature: + source-branches: ['unstable', 'develop', 'feature', 'hotfix', 'support'] + release: + source-branches: ['unstable', 'develop'] + etc... +``` + +### branches + +The header for all the individual branch configuration. + +### mode + +Same as for the [global configuration, explained above](#mode). + +### 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?[/-](?.+)'`. + +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: `label: ''` + +### increment + +Same as for the [global configuration, explained above](#increment). + +### 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 +prevents incrementing after a versioned branch is merged. + +In a GitFlow-based repository, setting this option can have implications on the +`CommitsSinceVersionSource` output variable. It can rule out a potentially +better version source proposed by the `MergeMessageBaseVersionStrategy`. For +more details and an in-depth analysis, please see [the discussion][2506]. + +### 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 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. + +**Example usage:** + +```yaml +branches: + pull-request: + mode: ContinuousDeployment + label: PullRequest + increment: Inherit + track-merge-target: true + 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. + +### 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 + +Indicates this branch config represents develop in GitFlow. + +### is-release-branch + +Indicates this branch config represents a release branch in GitFlow. + +### is-main-branch + +This indicates that this branch is a main branch. By default `main` and `support/*` are main branches. + +### pre-release-weight + +Provides a way to translate the `PreReleaseLabel` ([variables][variables]) to a numeric +value in order to avoid version collisions across different branches. For +example, a release branch created after "1.2.3-alpha.55" results in +"1.2.3-beta.1" and thus e.g. "1.2.3-alpha.4" and "1.2.3-beta.4" would have the +same file version: "1.2.3.4". One of the ways to use this value is to set +`assembly-file-versioning-format: +{Major}.{Minor}.{Patch}.{WeightedPreReleaseNumber}`. If the `pre-release-weight` +is set, it would be added to the `PreReleaseNumber` to get a final +`AssemblySemFileVer`, otherwise a branch specific default for +`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` + +``` log +1.2-alpha4 +01.02.03-rc03 +1.2.3.4 +``` + +### 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 + +[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 +[conventional-commits-config]: /docs/reference/version-increments#conventional-commit-messages +[conventional-commits]: https://www.conventionalcommits.org/ +[modes]: /docs/reference/modes +[variables]: /docs/reference/variables +[version-sources]: /docs/reference/version-sources diff --git a/docs/input/docs/reference/modes/continuous-delivery.md b/docs/input/docs/reference/modes/continuous-delivery.md index b8d306fb42..d1d2a1e712 100644 --- a/docs/input/docs/reference/modes/continuous-delivery.md +++ b/docs/input/docs/reference/modes/continuous-delivery.md @@ -2,75 +2,39 @@ Order: 20 Title: Continuous Delivery Description: | - Continuous Delivery is the default versioning mode. In this mode, - GitVersion calculates the next version and will use that until that is - released. + Sometimes you just want the version to keep changing and deploy continuously + to an testing system. In this case, Continuous Delivery is a good mode to + operate GitVersion by. RedirectFrom: docs/reference/versioning-modes/continuous-delivery --- -Continuous Delivery is the practice of having a deployment pipeline and is the -default mode in GitVersion. Each stage of the pipeline gets the code going -through the pipeline closer to production. +Continuous Delivery is the process of checking into a branch, running all the +tests and if everything goes green it is automatically pushed to a testing system. -The topic itself is rather large, here we will just focus on the building and -creation of _releasable_ artifacts. This is only a part of continuous delivery -as a whole, with the hard part being the ability to measure the impacts of what -you have deployed into production. +A good case for Continuous Delivery is when using Octopus deploy, as you +cannot publish the same version of a package into the same feed. -In essence continuous delivery means: - -* Your code is automatically built and tested -* If any of the automated tests fail, the team's #1 priority is to fix the - build -* If the build is green, the application can be deployed at any time - * Ideally the business should make that decision - * The same artifacts which were built and tested should be deployed - * That means no rebuilding everything when you are deploying - -Continuous delivery does not work well with GitFlow. The reason is that you are -required to _merge_ to main to do a release, triggering a rebuild and a new -set of artifacts to go through your pipeline. Depending on how long your -pipeline is, this could be a while. - -GitHubFlow is a better fit for Continuous delivery, the [mainline -development][mainline] model means that every merged feature branch will be -built as a _stable_ version and if the build/builds go green then you are free -to deploy to production at any time. - -## Usage - -By default, GitVersion is set up to do Continuous Delivery on all branches but -`develop`, which is set up with [Continuous Deployment][continuous-deployment]. -To change the mode to Continuous Delivery, change your -[configuration][configuration] to: - -```yaml -mode: ContinuousDelivery -``` +For this mode we follow the logic in [this blog post by Xavier Decoster][blog] +on the issues of incrementing automatically. ## How Continuous Delivery affects GitVersion -The thing about continuous delivery is that there will be _multiple_ candidates -to deploy to production and it is a human choice to deploy. This means that -GitVersion will build **the same semantic version** until that version is -deployed. For instance: +Continuous delivery is good when you deploy continuously to an testing system. -* 1.1.0+5 -* 1.1.0+6 -* 1.1.0+7 <-- This is the artifact we release, tag the commit which created - this version -* 1.1.1+0 +* 1.1.0-3 +* 1.1.0-2 (tag: 1.1.0-2) <-- This is the version which has been deployed on testing +* 1.1.0-1 +* 1.1.1-0 -Tags are required in this mode to communicate when the release is done as it's -an external manual process. +Tags are not required but optional in this mode to communicate when the release +is done as it's an automated process. ## Resources -* [Continuous Delivery on Wikipedia][wikipedia] -* [Continuous Delivery, the book][book] +* [Configuration][configuration] +* [Semantic Versioning & auto-incremented NuGet package versions][blog] +* [Continuous delivery][wikipedia] -[book]: https://www.amazon.com/Continuous-Delivery-Deployment-Automation-Addison-Wesley/dp/0321601912 [configuration]: /docs/reference/configuration -[continuous-deployment]: /docs/reference/modes/continuous-deployment -[mainline]: /docs/reference/modes/mainline +[blog]: https://www.xavierdecoster.com/semantic-versioning-auto-incremented-nuget-package-versions [wikipedia]: https://en.wikipedia.org/wiki/Continuous_delivery diff --git a/docs/input/docs/reference/modes/continuous-deployment.md b/docs/input/docs/reference/modes/continuous-deployment.md index 999256d779..852936e67f 100644 --- a/docs/input/docs/reference/modes/continuous-deployment.md +++ b/docs/input/docs/reference/modes/continuous-deployment.md @@ -3,42 +3,32 @@ Order: 30 Title: Continuous Deployment Description: | Sometimes you just want the version to keep changing and deploy continuously. - In this case, Continuous Deployment is a good mode to operate GitVersion by. RedirectFrom: docs/reference/versioning-modes/continuous-deployment --- -Continuous Deployment is the process of checking into main, running all the -tests and if everything goes green it is automatically pushed to production. - -A good case for Continuous Deployment is when using Octopus deploy, as you -cannot publish the same version of a package into the same feed. +Continuous Deployment is the process of checking into main and automatically +deploying to production. For this mode we follow the logic in [this blog post by Xavier Decoster][blog] on the issues of incrementing automatically. -As such we force a pre-release tag on all branches, this is fine for -applications but can cause problems for libraries. As such this mode may or may -not work for you, which leads us into a new mode in v4 of GitVersion: -[Mainline Development][mainline]. +## How Continuous Deployment affects GitVersion -### Usage +The thing about continuous deployment is that there will be only one version +to deploy on production. This means that GitVersion will build +**the same semantic version** for every commit until it has been tagged. For instance: -By default GitVersion is set up to do Continuous Deployment versioning on the -`develop` branch, but for all other branches, [Continuous -Delivery][continuous-delivery] is the default mode. From version 3 of GitVersion -this behavior is [configurable][configuration]. +* 1.2.0 +* 1.1.0 (tag: 1.1.0) <-- This is the version which has been deployed on production +* 1.1.0 +* 1.1.1 -The default behavior for v3 and how v1 & 2 worked was that the version only -incremented after a tag, which signified a release. In v3 you can simply switch -the default mode in the [configuration][configuration] from `ContinuousDelivery` -to `ContinuousDeployment` and the version will then increment each commit, -giving you the features of GitVersion with continuous deployment: +Tags are required in this mode to communicate when the deployement happens on production. -```yaml -mode: ContinuousDeployment -``` +## Resources + +* [Configuration][configuration] +* [Semantic Versioning & auto-incremented NuGet package versions][blog] -[blog]: https://www.xavierdecoster.com/semantic-versioning-auto-incremented-nuget-package-versions [configuration]: /docs/reference/configuration -[continuous-delivery]: /docs/reference/modes/continuous-delivery -[mainline]: /docs/reference/modes/mainline +[blog]: https://www.xavierdecoster.com/semantic-versioning-auto-incremented-nuget-package-versions diff --git a/docs/input/docs/reference/modes/mainline.md b/docs/input/docs/reference/modes/mainline.md deleted file mode 100644 index 3c882715a9..0000000000 --- a/docs/input/docs/reference/modes/mainline.md +++ /dev/null @@ -1,76 +0,0 @@ ---- -Order: 40 -Title: Mainline Development -Description: | - Mainline Development versioning mode works like the Continuous Delivery, - except that it tells GitVersion to *infer* releases from merges and commits - to `main`. -RedirectFrom: docs/reference/versioning-modes/mainline-development ---- - -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 -means that pull requests should not be merged until they are ready to go out. - -To properly achieve mainline development you need confidence in your test suite -as if it goes green against a PR then you are confident that you can merge and -release that pull request. Another property of mainline development is normally -that you fix going forward, not revert. When an issue is discovered with a -release, add a test or some sort of check to make sure it won't happen again, -fix the issue, then do a release with the fix. - -Like all things, it is an approach and will work for some people and not for -others. GitVersion is unique in the fact that it works very well with mainline -development and the version numbers it generates are _predictive_ and indicate -what the next version to be released is. Most other approaches require bumping -the version number before the release which means that the version being built -and the version number which will be deployed are often different. - -This mode is great if you do not want to tag each release because you simply -deploy every commit to main. The behaviour of this mode is as follows: - -1. Calculate a base version (likely a tag in this mode) -2. Walk all commits from the base version commit -3. When a merge commit is found: - * Calculate increments for each direct commit on main - * Calculate the increment for the branch -4. Calculate increments for each remaining direct commit -5. For feature branches then calculate increment for the commits so far on your - feature branch. - -If you _do not want_ GitVersion to treat a commit or a pull request as a release -and increment the version you can use `+semver: none` or `+semver: skip` in a -commit message to skip incrementing for that commit. - -Here is an example of what mainline development looks like: - -![Mainline mode][mainline-img] - -:::{.alert .alert-warning} -**Warning** - -This approach can slow down over time, we recommend to tag -intermittently (maybe for minor or major releases) because then GitVersion -will start the version calculation from that point. Much like a snapshot in an -event sourced system. We will probably add in warnings to tag when things are -slowing down. -::: - -## Usage - -By default GitVersion is set up to do [Continuous Delivery][continuous-delivery] -versioning on all branches but `develop` (which does [Continuous -Deployment][continuous-deployment] by default). To change the [versioning -mode][modes] to Mainline Development, just change the [configuration][configuration] as such: - -```yaml -mode: Mainline -``` - -[configuration]: /docs/reference/configuration -[continuous-delivery]: /docs/reference/modes/continuous-delivery -[continuous-deployment]: /docs/reference/modes/continuous-deployment -[githubflow]: /docs/learn/branching-strategies/githubflow -[mainline-img]: /docs/img/mainline-mode.png -[modes]: /docs/reference/modes diff --git a/docs/input/docs/reference/modes/manual-deployment.md b/docs/input/docs/reference/modes/manual-deployment.md new file mode 100644 index 0000000000..9ea3383d94 --- /dev/null +++ b/docs/input/docs/reference/modes/manual-deployment.md @@ -0,0 +1,37 @@ +--- +Order: 10 +Title: Manual Deployment +Description: | + The Manual Deployment mode can be used to remain on the same pre-released + version until it has been deployed dedicatedly. +RedirectFrom: docs/reference/versioning-modes/manual-deployment +--- + +Having not the necessity to deploy the build artifacts on every commit is an +indecation of using the __Manual Deployment__ mode. This mode can be used to +remain on the same pre-released version until it has been deployed dedicatedly. + +## How Manual Deployment affects GitVersion + +The thing about manual deployment is that there will be _multiple_ candidates +to deploy on testing and it is a human choice to deploy. This means that +GitVersion will build __the same semantic version__ until that version is +deployed. For instance: + +* 1.1.0-2+1 +* 1.1.0-1+2 (tag: 1.1.0-1) <-- This is the version which has been deployed on testing +* 1.1.0-1+1 +* 1.1.1-1+0 + +Tags are required in this mode to communicate when the release is done as it's +an external manual process. + +## Resources + +* [Configuration][configuration] +* [Continuous Delivery on Wikipedia][wikipedia] +* [Continuous Delivery, the book][book] + +[configuration]: /docs/reference/configuration +[book]: https://www.amazon.com/Continuous-Delivery-Deployment-Automation-Addison-Wesley/dp/0321601912 +[wikipedia]: https://en.wikipedia.org/wiki/Continuous_delivery diff --git a/docs/input/docs/reference/requirements.md b/docs/input/docs/reference/requirements.md index 91a2785b80..fd205ea8aa 100644 --- a/docs/input/docs/reference/requirements.md +++ b/docs/input/docs/reference/requirements.md @@ -42,7 +42,6 @@ If it is ambigous which reference (branch or tag) is being built, which is often the case on build servers, the `Git_Branch` environment variable needs to be defined and set to the reference being built. -[git-switch]: https://git-scm.com/docs/git-switch [git-unshallow]: https://git-scm.com/docs/git-fetch#Documentation/git-fetch.txt---unshallow [gitflow]: /docs/learn/branching-strategies/gitflow [build-servers]: /docs/reference/build-servers 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..27cf1d6b33 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,10 @@ 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-`. -Example: `0.1.0--no-branch-.1+4` +If HEAD is in detached state tag will be `-no-branch-`. + +Example: `0.0.1--no-branch-.1+4` ### Tagging commit @@ -126,11 +138,16 @@ 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 diff --git a/docs/input/docs/reference/version-sources.md b/docs/input/docs/reference/version-sources.md index e58b7c4beb..c12adfd217 100644 --- a/docs/input/docs/reference/version-sources.md +++ b/docs/input/docs/reference/version-sources.md @@ -11,12 +11,12 @@ version should be. The logic of GitVersion is something like this: -* Is the current commit tagged - * Yes: Use the tag as the version - * No: continue -* Calculate the base version (highest version from all the sources) -* Increment version if needed based on branch config -* Calculate the build metadata (everything after the +) and append to the +* Is the current commit tagged + * Yes: Use the tag as the version + * No: continue +* Calculate the base version (highest version from all the sources) +* Increment version if needed based on branch config +* Calculate the build metadata (everything after the +) and append to the calculated version ## Version Sources @@ -50,9 +50,9 @@ Will increment: false For the develop branch, i.e. marked with `is-develop: true` -* Returns the version number extracted from any child release-branches, i.e. +* Returns the version number extracted from any child release-branches, i.e. those marked with `is-release-branch: true` -* Returns the version number of any tags on the main branch +* Returns the version number of any tags on the main branch Will increment: true diff --git a/docs/input/docs/usage/cli/arguments.md b/docs/input/docs/usage/cli/arguments.md index 14d7c8f996..c47e115ba7 100644 --- a/docs/input/docs/usage/cli/arguments.md +++ b/docs/input/docs/usage/cli/arguments.md @@ -23,7 +23,6 @@ GitVersion [path] path The directory containing .git. If not defined current directory is used. (Must be first argument) - init Configuration utility for gitversion /version Displays the version of GitVersion /diag Runs GitVersion with additional diagnostic information (requires git.exe to be installed) @@ -34,13 +33,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 +64,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 @@ -93,13 +93,11 @@ GitVersion [path] Use this switch to override /nofetch Disables 'git fetch' during version calculation. Might cause GitVersion to not calculate your version as expected. - -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`. @@ -110,31 +108,28 @@ Double quote character inside of the double quoted `value` has to be be escaped Following options are supported: -1. `assembly-file-versioning-format` -2. `assembly-file-versioning-scheme` -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` -11. `increment` -12. `legacy-semver-padding` -13. `major-version-bump-message` -14. `minor-version-bump-message` -15. `mode` -16. `next-version` -17. `no-bump-message` -18. `patch-version-bump-message` -19. `tag-prefix` -20. `tag-pre-release-weight` -21. `update-build-number` +1. `assembly-file-versioning-format` +2. `assembly-file-versioning-scheme` +3. `assembly-informational-format` +4. `assembly-versioning-format` +5. `assembly-versioning-scheme` +6. `commit-date-format` +7. `commit-message-incrementing` +8. `label` +9. `increment` +10. `major-version-bump-message` +11. `minor-version-bump-message` +12. `mode` +13. `next-version` +14. `no-bump-message` +15. `patch-version-bump-message` +16. `tag-prefix` +17. `tag-pre-release-weight` +18. `update-build-number` 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/assembly-patch.md b/docs/input/docs/usage/cli/assembly-patch.md index 704044e0fd..ef1a7b2f07 100644 --- a/docs/input/docs/usage/cli/assembly-patch.md +++ b/docs/input/docs/usage/cli/assembly-patch.md @@ -10,10 +10,10 @@ Description: | `AssemblyInfo.cs` or `AssemblyInfo.vb` files in the git repo and update them. It will update the following assembly attributes: -* `AssemblyVersion` will be set to the `AssemblySemVer` variable. -* `AssemblyFileVersion` will be set to the `MajorMinorPatch` variable with an +* `AssemblyVersion` will be set to the `AssemblySemVer` variable. +* `AssemblyFileVersion` will be set to the `MajorMinorPatch` variable with an appended `.0`. -* `AssemblyInformationalVersion` will be set to the `InformationalVersion` +* `AssemblyInformationalVersion` will be set to the `InformationalVersion` variable. Note that contrary to when using the [MSBuild Task][msbuild-task] the @@ -29,10 +29,10 @@ already exist. Use the `/ensureassemblyinfo` switch alongside `/updateassemblyinfo `, if the filename specified does not exist it will be generated based on a known template that adds: -* `AssemblyVersion` will be set to the `AssemblySemVer` variable. -* `AssemblyFileVersion` will be set to the `MajorMinorPatch` variable with an +* `AssemblyVersion` will be set to the `AssemblySemVer` variable. +* `AssemblyFileVersion` will be set to the `MajorMinorPatch` variable with an appended `.0`. -* `AssemblyInformationalVersion` will be set to the `InformationalVersion` +* `AssemblyInformationalVersion` will be set to the `InformationalVersion` variable. This can be done for \*.cs, \*.vb and \*.fs files. 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..f7d7c2cb96 --- /dev/null +++ b/docs/input/docs/usage/docker.md @@ -0,0 +1,50 @@ +--- +Order: 50 +Title: Docker +Description: | + Use GitVersion through one of its many published Docker containers. +--- + +The recommended image to run is `alpine`, as they are the smallest Docker images we provide. This will execute GitVersion for the current working directory (`$(pwd)`) on Linux and Unix or powershell on Windows: + +```sh +docker run --rm -v "$(pwd):/repo" gittools/gitversion:{tag} /repo +``` + +The following command will execute GitVersion for the current working directory (`%CD%`) on Windows with CMD: + +```sh +docker run --rm -v "%CD%:/repo" gittools/gitversion:{tag} /repo +``` + +Note that the path `/repo` needs to be passed as an argument since the `gitversion` executable within the container is not aware of the fact that it's running inside a container. + +### CI Agents + +If you are running GitVersion on a CI agent, you may need to specify environment variables to allow GitVersion to work correctly. +For example, on Azure DevOps you may need to set the following environment variables: + +```sh +docker run --rm -v "$(pwd):/repo" --env TF_BUILD=true --env BUILD_SOURCEBRANCH=$(Build.SourceBranch) gittools/gitversion:{tag} /repo +``` + +On GitHub Actions, you may need to set the following environment variables: + +```sh +docker run --rm -v "$(pwd):/repo" --env GITHUB_ACTIONS=true --env GITHUB_REF=$(GITHUB_REF) gittools/gitversion:{tag} /repo +``` + +### Tags + +Most of the tags we provide have both arm64 and amd64 variants. If you need to pull a architecture specific tag you can do that like: + +```sh +docker run --rm -v "$(pwd):/repo" gittools/gitversion:{tag}-amd64 /repo +docker run --rm -v "$(pwd):/repo" gittools/gitversion:{tag}-arm64 /repo +``` + +The list of available containers can be found on [Docker Hub][docker-hub]. + +[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..f5ff401e5a 100644 --- a/docs/input/docs/usage/msbuild.md +++ b/docs/input/docs/usage/msbuild.md @@ -18,10 +18,6 @@ version information that is compiled into the resulting artifact. It currently works with desktop `MSBuild`. Support for CoreCLR with `dotnet build` is coming soon. -> **Note**\ -> The nuget package was "_[GitVersionTask](https://www.nuget.org/packages/GitVersionTask/)_" up until version 5.5.1.\ -> From version 5.6.0 it has been called "_[GitVersion.MsBuild](https://www.nuget.org/packages/GitVersion.MsBuild/)_" - ## TL;DR ### Install the MSTask targets @@ -40,7 +36,7 @@ If you're using `PackageReference` style NuGet dependencies (VS 2017+), add dependency of your package: ```xml - + All ``` @@ -91,6 +87,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 @@ -121,10 +123,10 @@ Default sample: Now, when you build: -* `AssemblyVersion` will be set to the `AssemblySemVer` variable. -* `AssemblyFileVersion` will be set to the `MajorMinorPatch` variable with `.0` +* `AssemblyVersion` will be set to the `AssemblySemVer` variable. +* `AssemblyFileVersion` will be set to the `MajorMinorPatch` variable with `.0` appended to it. -* `AssemblyInformationalVersion` will be set to the `InformationalVersion` variable. +* `AssemblyInformationalVersion` will be set to the `InformationalVersion` variable. #### Other injected Variables @@ -258,14 +260,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 correspond 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/input/docs/workflows/GitFlow/v1.yml b/docs/input/docs/workflows/GitFlow/v1.yml new file mode 100644 index 0000000000..f839b27b94 --- /dev/null +++ b/docs/input/docs/workflows/GitFlow/v1.yml @@ -0,0 +1,167 @@ +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: + mode: ContinuousDelivery + 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/docs/input/docs/workflows/GitHubFlow/v1.yml b/docs/input/docs/workflows/GitHubFlow/v1.yml new file mode 100644 index 0000000000..822fe7991f --- /dev/null +++ b/docs/input/docs/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 + 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: 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 + track-merge-message: true + regex: ^features?[/-](?.+) + source-branches: + - main + - release + 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: + - main + - release + - feature + is-source-branch-for: [] + pre-release-weight: 30000 + unknown: + mode: ManualDeployment + label: '{BranchName}' + increment: Inherit + prevent-increment: + when-current-commit-tagged: false + track-merge-message: false + regex: (?.+) + source-branches: + - main + - release + - feature + - pull-request + 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/docs/input/docs/workflows/TrunkBased/preview1.yml b/docs/input/docs/workflows/TrunkBased/preview1.yml new file mode 100644 index 0000000000..07012e4dd6 --- /dev/null +++ b/docs/input/docs/workflows/TrunkBased/preview1.yml @@ -0,0 +1,101 @@ +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: +- ConfiguredNextVersion +- Mainline +branches: + main: + mode: ContinuousDeployment + 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 + feature: + mode: ContinuousDelivery + label: '{BranchName}' + increment: Minor + prevent-increment: + when-current-commit-tagged: false + track-merge-message: true + regex: ^features?[/-](?.+) + source-branches: + - main + is-source-branch-for: [] + is-main-branch: false + pre-release-weight: 30000 + hotfix: + mode: ContinuousDelivery + label: '{BranchName}' + increment: Patch + prevent-increment: + when-current-commit-tagged: false + regex: ^hotfix(es)?[/-](?.+) + source-branches: + - main + is-source-branch-for: [] + is-release-branch: 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+)' + track-merge-message: true + regex: ^(pull|pull\-requests|pr)[/-] + source-branches: + - main + - feature + - hotfix + is-source-branch-for: [] + pre-release-weight: 30000 + unknown: + increment: Patch + prevent-increment: + when-current-commit-tagged: false + regex: (?.+) + source-branches: + - main + is-source-branch-for: [] + 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: '' +source-branches: [] +is-source-branch-for: [] +tracks-release-branches: false +is-release-branch: false +is-main-branch: false 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..e367ffcf00 --- /dev/null +++ b/global.json @@ -0,0 +1,10 @@ +{ + "projects": [ + "build", + "new-cli", + "src" + ], + "sdk": { + "version": "8.0.303" + } +} diff --git a/mkdocs.yml b/mkdocs.yml deleted file mode 100644 index 6215b58620..0000000000 --- a/mkdocs.yml +++ /dev/null @@ -1,6 +0,0 @@ -site_name: GitVersion -theme: readthedocs -repo_url: https://github.com/GitTools/GitVersion - -pages: -- Home: index.md 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..324ebd07a9 --- /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..aa293afe82 --- /dev/null +++ b/new-cli/GitVersion.Cli.Generator/GitVersion.Cli.Generator.csproj @@ -0,0 +1,17 @@ + + + + true + true + en + true + $(NoWarn);RS1035;CS8669 + + + + + + + + + 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..95d92488d0 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,18 +906,19 @@ "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" } }, "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, "dependencies": { - "fill-range": "^7.0.1" + "fill-range": "^7.1.1" }, "engines": { "node": ">=8" @@ -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,10 +1073,16 @@ } }, "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, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.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", @@ -1700,9 +2049,9 @@ } }, "node_modules/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==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, "dependencies": { "to-regex-range": "^5.0.1" @@ -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,422 +3092,730 @@ "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": { + "@types/unist": "*" + } + }, + "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": { - "micromark-extension-frontmatter": "^1.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-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/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" + "@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/unist": "^3.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/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/estree-jsx": "^0.0.1" + "@types/unist": "^3.0.0", + "unist-util-is": "^6.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-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/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/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": { - "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/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", - "@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/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-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/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/nlcst": "^1.0.0" + "@types/unist": "^3.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-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": { + "@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" + }, "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/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": { - "map-age-cleaner": "^0.1.1", - "mimic-fn": "^2.0.0", - "p-is-promise": "^2.0.0" - }, - "engines": { - "node": ">=6" + "@types/unist": "*" } }, - "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/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, "engines": { - "node": ">=6" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "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-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": { - "@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" + "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-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-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, - "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" + "@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-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/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": { - "fault": "^2.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0" + "@types/unist": "*" + } + }, + "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/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-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" + "@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/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-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "uvu": "^0.5.0" + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "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/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-util-character": "^1.0.0", - "micromark-util-types": "^1.0.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-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-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", - "uvu": "^0.5.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-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/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-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" + "@types/unist": "*" } }, - "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-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", - "micromark-util-types": "^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-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/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-symbol": "^1.0.0" + "@types/unist": "*" } }, - "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/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, - "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": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "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==", + "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, + "dependencies": { + "@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/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, + "dependencies": { + "@types/unist": "*" + } + }, + "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/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, + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "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, + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "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, + "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/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, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "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, + "dependencies": { + "@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/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, + "dependencies": { + "@types/unist": "*" + } + }, + "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/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, + "dependencies": { + "@types/mdast": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "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, + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "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": { + "@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/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, + "dependencies": { + "@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": "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/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, + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/mdast-util-to-nlcst/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-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, + "dependencies": { + "@types/nlcst": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "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, + "dependencies": { + "@types/unist": "^2" + } + }, + "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, + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "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, + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "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, + "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/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": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "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, + "dependencies": { + "@types/mdast": "^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==", + "dev": true, + "dependencies": { + "map-age-cleaner": "^0.1.1", + "mimic-fn": "^2.0.0", + "p-is-promise": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "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": ">=6" + } + }, + "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, "funding": [ { @@ -3092,14 +3828,29 @@ } ], "dependencies": { - "micromark-util-chunked": "^1.0.0", - "micromark-util-types": "^1.0.0" + "@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/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/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, "funding": [ { @@ -3112,13 +3863,44 @@ } ], "dependencies": { - "micromark-util-symbol": "^1.0.0" + "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/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/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": { + "fault": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "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, "funding": [ { @@ -3131,16 +3913,15 @@ } ], "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" + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "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==", + "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, "funding": [ { @@ -3151,12 +3932,18 @@ "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/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/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": [ { @@ -3167,12 +3954,213 @@ "type": "OpenCollective", "url": "https://opencollective.com/unified" } - ] + ], + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "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": { + "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/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, + "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/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": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "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, + "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/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, + "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/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": { + "micromark-util-chunked": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "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, + "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/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, + "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/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, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "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, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "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==", + "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, "funding": [ { @@ -3185,13 +4173,13 @@ } ], "dependencies": { - "micromark-util-symbol": "^1.0.0" + "micromark-util-symbol": "^2.0.0" } }, "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==", + "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, "funding": [ { @@ -3204,13 +4192,13 @@ } ], "dependencies": { - "micromark-util-types": "^1.0.0" + "micromark-util-types": "^2.0.0" } }, "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==", + "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, "funding": [ { @@ -3223,15 +4211,15 @@ } ], "dependencies": { - "micromark-util-character": "^1.0.0", - "micromark-util-encode": "^1.0.0", - "micromark-util-symbol": "^1.0.0" + "micromark-util-character": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-symbol": "^2.0.0" } }, "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==", + "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, "funding": [ { @@ -3244,16 +4232,16 @@ } ], "dependencies": { - "micromark-util-chunked": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "uvu": "^0.5.0" + "devlop": "^1.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, "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==", + "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, "funding": [ { @@ -3267,9 +4255,9 @@ ] }, "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==", + "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, "funding": [ { @@ -3305,6 +4293,7 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "dev": true, + "peer": true, "dependencies": { "brace-expansion": "^1.1.7" }, @@ -3318,13 +4307,39 @@ "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/minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", "dev": true, "engines": { - "node": ">=4" + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "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": { + "chownr": "^2.0.0", + "infer-owner": "^1.0.4", + "mkdirp": "^1.0.3" + }, + "engines": { + "node": ">=10" } }, "node_modules/ms": { @@ -3366,6 +4381,21 @@ "eslint-plugin-react-hooks": "^4.0.0" } }, + "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": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", @@ -3376,14 +4406,23 @@ } }, "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==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", "dev": true, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, + "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", @@ -3538,7 +4577,7 @@ "node": ">=8" } }, - "node_modules/p-any/node_modules/p-cancelable": { + "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==", @@ -3547,15 +4586,6 @@ "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", @@ -3583,33 +4613,6 @@ "node": ">=6" } }, - "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==", - "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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==", - "dev": true, - "dependencies": { - "p-limit": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/p-map": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", @@ -3645,15 +4648,6 @@ "node": ">=8" } }, - "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==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/p-timeout": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", @@ -3666,15 +4660,6 @@ "node": ">=8" } }, - "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==", - "dev": true, - "engines": { - "node": ">=6" - } - }, "node_modules/parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -3688,24 +4673,145 @@ "node": ">=6" } }, - "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/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": { - "@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" - }, + "@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": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "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": { + "@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": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parse-json/node_modules/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, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "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, + "engines": { + "node": ">=14.16" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, + "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/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": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "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/nlcst": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "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/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "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/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/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/unist": "^3.0.0", + "unist-util-stringify-position": "^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", @@ -3717,6 +4823,7 @@ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", "dev": true, + "peer": true, "engines": { "node": ">=4" } @@ -3726,6 +4833,7 @@ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", "dev": true, + "peer": true, "engines": { "node": ">=0.10.0" } @@ -3735,7 +4843,6 @@ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true, - "peer": true, "engines": { "node": ">=8" } @@ -3747,6 +4854,31 @@ "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": { + "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": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "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, + "engines": { + "node": "14 || >=16.14" + } + }, "node_modules/picomatch": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", @@ -3778,13 +4910,13 @@ "node": ">= 0.8.0" } }, - "node_modules/prepend-http": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", - "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", + "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, "engines": { - "node": ">=4" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/progress": { @@ -3855,6 +4987,28 @@ "node": ">=6" } }, + "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": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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", @@ -3862,6 +5016,19 @@ "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": { + "json-parse-even-better-errors": "^2.3.0", + "npm-normalize-package-bin": "^1.0.1" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/readable-stream": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", @@ -3926,15 +5093,15 @@ } }, "node_modules/remark": { - "version": "14.0.2", - "resolved": "https://registry.npmjs.org/remark/-/remark-14.0.2.tgz", - "integrity": "sha512-A3ARm2V4BgiRXaUo5K0dRvJ1lbogrbXnhkJRmD0yw092/Yl0kOCZt1k9ZeElEwkZsWGsMumz6qL5MfNJH9nOBA==", + "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", - "remark-parse": "^10.0.0", - "remark-stringify": "^10.0.0", - "unified": "^10.0.0" + "@types/mdast": "^4.0.0", + "remark-parse": "^11.0.0", + "remark-stringify": "^11.0.0", + "unified": "^11.0.0" }, "funding": { "type": "opencollective", @@ -3942,13 +5109,15 @@ } }, "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==", + "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": { - "remark": "^14.0.0", - "unified-args": "^9.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" @@ -3958,745 +5127,824 @@ "url": "https://opencollective.com/unified" } }, + "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": "4.0.1", - "resolved": "https://registry.npmjs.org/remark-frontmatter/-/remark-frontmatter-4.0.1.tgz", - "integrity": "sha512-38fJrB0KnmD3E33a5jZC/5+gGAC2WKNiPw1/fdXJvijBlhA7RCsvJklrYJakS0HedninvaCYW8lQGf9C918GfA==", + "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", - "mdast-util-frontmatter": "^1.0.0", - "micromark-extension-frontmatter": "^1.0.0", - "unified": "^10.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-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/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", - "mdast-util-to-markdown": "^1.0.0", - "unified": "^10.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": { - "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/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", - "remark-message-control": "^7.0.0", - "unified": "^10.1.0" + "@types/unist": "^3.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "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/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", - "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-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/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", - "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-stringify-position": "^4.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "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/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", - "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", + "unified": "^11.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "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/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": { - "unified-lint-rule": "^1.0.0", - "unist-util-visit": "^1.0.0" + "@types/unist": "*" } }, - "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/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/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", + "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-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/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": { - "wrapped": "^1.0.1" + "@types/unist": "^3.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "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==", - "dev": true, - "dependencies": { - "unist-util-visit-parents": "^2.0.0" - } - }, - "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/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": { - "unist-util-is": "^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" } }, - "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/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", - "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-stringify-position": "^4.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "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/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-position": "^4.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-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/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-position": "^4.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-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/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": { - "@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" + "@types/unist": "*" } }, - "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/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": { - "@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", + "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-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/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" + "@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-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/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-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-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/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" + "@types/unist": "^3.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "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/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-generated": "^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-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/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", - "unist-util-generated": "^2.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-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/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", - "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" + "@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-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/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": { - "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": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "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/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": { - "wrapped": "^1.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" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "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 - }, - "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==", + "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": { - "unist-util-visit-parents": "^2.0.0" + "@types/unist": "*" } }, - "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/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": { - "unist-util-is": "^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/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/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", - "vfile-location": "^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-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/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", - "pluralize": "^8.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^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-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/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", - "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/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", - "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" }, "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/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-generated": "^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-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==", + "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", - "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-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/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": { - "@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-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==", + "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": { - "@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/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-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/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": { - "@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" + "@types/unist": "*" + } + }, + "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-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/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-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/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", - "@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/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-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/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": { - "check-links": "^1.1.8", - "is-online": "^8.2.1", - "unified-lint-rule": "^1.0.4", - "unist-util-visit": "^2.0.1" + "@types/unist": "^3.0.0" }, - "engines": { - "node": ">=6" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "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/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": { - "wrapped": "^1.0.1" + "@types/unist": "^3.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "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/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/unist": "^3.0.0" + }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "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==", + "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/unist": "^2.0.0", - "unist-util-is": "^4.0.0", - "unist-util-visit-parents": "^3.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-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/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/unist": "^2.0.0", - "unist-util-is": "^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-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/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", - "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/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "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/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", - "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" + "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/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/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, "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-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, + "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-empty-sections": { + "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": { + "@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-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, + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "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": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-code-block-style/node_modules/unist-util-stringify-position": { "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/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", "dev": true, "dependencies": { - "mdast-util-to-string": "^1.0.2", - "unified-lint-rule": "^1.0.0", - "unist-util-visit": "^1.0.0" + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "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/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": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-empty-sections/node_modules/unified-lint-rule": { + "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, + "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-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, + "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-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==", @@ -4709,13 +5957,13 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-empty-sections/node_modules/unist-util-is": { + "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-no-empty-sections/node_modules/unist-util-visit": { + "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==", @@ -4724,7 +5972,7 @@ "unist-util-visit-parents": "^2.0.0" } }, - "node_modules/remark-lint-no-empty-sections/node_modules/unist-util-visit-parents": { + "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==", @@ -4733,4554 +5981,13848 @@ "unist-util-is": "^3.0.0" } }, - "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/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, "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", + "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-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-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, "dependencies": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0" + "@types/unist": "*" + } + }, + "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, + "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-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-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": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^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/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-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, "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-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-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, "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-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": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.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-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-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, "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", + "vfile-message": "^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-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": { - "@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" }, "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-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": { - "@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", + "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/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-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, "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": "*" + } + }, + "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/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, + "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-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-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, "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", + "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": { - "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-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, "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" }, "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-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, "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/unist": "^3.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-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, "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-is": "^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-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": { - "unified-lint-rule": "^1.0.3", - "unist-util-map": "^1.0.4", - "unist-util-to-list-of-char": "^0.1.3" + "@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-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-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": { - "wrapped": "^1.0.1" + "@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-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-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/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", + "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-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-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/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-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", + "vfile": "^6.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-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/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-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-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/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-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/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.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-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-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/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" }, "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-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/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-is": "^6.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-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/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-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-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": { - "@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-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-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/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-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/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-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": { - "@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": "*" + } + }, + "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/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-fenced-code-flag/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", - "@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", + "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": { - "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-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": { - "@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-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/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-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-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/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" }, "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-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, "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-is": "^6.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-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": { - "wrapped": "^1.0.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" } }, - "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-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": { + "@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/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-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": { - "unist-util-visit-parents": "^2.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-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==", + "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": { - "unist-util-is": "^3.0.0" + "@types/unist": "*" } }, - "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-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/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-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/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-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/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-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, "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-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": { - "@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-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": { - "@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-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, "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-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, "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-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, "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" + "@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/resolve": { - "version": "1.21.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.21.0.tgz", - "integrity": "sha512-3wCbTpk5WJlyE4mSOtDLhqQmGFi0/TD9VPwmiolnk8U0wRgMEktqCXd3vy5buTO3tljvalNvKrjHEfrd2WpEKA==", + "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, - "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==", - "dev": true, - "peer": true, - "engines": { - "node": ">=4" - } + "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/responselike": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", - "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", + "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": { - "lowercase-keys": "^1.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/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-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, - "peer": true, "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" + "@types/unist": "^3.0.0", + "trough": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.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-file-extension/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": { - "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-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, - "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", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.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-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, "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" }, - "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-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, "dependencies": { - "shebang-regex": "^3.0.0" + "@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" }, - "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-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, - "engines": { - "node": ">=8" + "dependencies": { + "@types/unist": "*" } }, - "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-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, "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.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": { - "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=", - "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-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, "dependencies": { - "safe-buffer": "~5.2.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/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-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, "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" + "@types/unist": "^3.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "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-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, - "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/unist": "^3.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-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, - "peer": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" + "@types/unist": "^3.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "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-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, - "peer": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" + "@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/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-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": { - "ansi-regex": "^6.0.1" + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" }, - "engines": { - "node": ">=12" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "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": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/strip-bom": { + "node_modules/remark-lint-final-newline": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "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, - "engines": { - "node": ">=4" + "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" } }, - "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==", + "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, "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" + "@types/unist": "*" } }, - "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=", + "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 }, - "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" - } - }, - "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-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, "dependencies": { - "is-number": "^7.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" }, - "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-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, "dependencies": { - "is-buffer": "^2.0.0", - "vfile": "^5.1.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/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/trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", + "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, + "dependencies": { + "@types/unist": "^3.0.0" + }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "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-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, - "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", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.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-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, - "peer": true, "dependencies": { - "minimist": "^1.2.0" + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.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-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, "dependencies": { - "prelude-ls": "^1.2.1" + "@types/mdast": "^4.0.0", + "unified-lint-rule": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit": "^5.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-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, - "engines": { - "node": ">=6" + "dependencies": { + "@types/unist": "*" } }, - "node_modules/typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", + "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 }, - "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==", + "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, "dependencies": { - "@types/unist": "^2.0.0", + "@types/unist": "^3.0.0", "bail": "^2.0.0", + "devlop": "^1.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" + "vfile": "^6.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-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, "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", + "trough": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.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-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/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/unist": "^3.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-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, "dependencies": { - "@types/unist": "^2.0.0", - "trough": "^2.0.0", - "unified": "^10.0.0", - "vfile": "^5.0.0" + "@types/unist": "^3.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/unified-message-control": { + "node_modules/remark-lint-hard-break-spaces/node_modules/unist-util-stringify-position": { "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==", + "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", - "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" }, "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-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, "dependencies": { - "@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" }, "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-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, "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.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-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-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, + "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-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-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, "dependencies": { - "@types/unist": "^2.0.0" + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.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-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, + "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/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-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": { - "object-assign": "^4.0.1" + "@types/unist": "*" } }, - "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==", + "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 + }, + "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, + "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-stringify-position": { + "node_modules/remark-lint-heading-increment/node_modules/unified-lint-rule": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", - "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==", + "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" + "@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": { - "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-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": { - "unist-util-generated": "^1.1.6", - "unist-util-visit": "^1.4.0" + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "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-heading-increment/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-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==", + "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, "dependencies": { - "unist-util-visit-parents": "^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-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-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, "dependencies": { - "unist-util-is": "^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" } }, - "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-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, "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.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-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/unist": "^2.0.0", - "unist-util-is": "^5.0.0" + "@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" } }, - "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-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, - "peer": true, "dependencies": { - "punycode": "^2.1.0" + "@types/unist": "*" } }, - "node_modules/url-parse-lax": { + "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 + }, + "node_modules/remark-lint-heading-style/node_modules/mdast-util-heading-style": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", - "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", + "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, "dependencies": { - "prepend-http": "^2.0.0" + "@types/mdast": "^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-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, "dependencies": { - "dequal": "^2.0.0", - "diff": "^5.0.0", - "kleur": "^4.0.3", - "sade": "^1.7.3" - }, - "bin": { - "uvu": "bin.js" + "@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" }, - "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==", + "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, - "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" + } }, - "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-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, "dependencies": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^3.0.0", - "vfile-message": "^3.0.0" + "@types/unist": "^3.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-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, "dependencies": { - "@types/unist": "^2.0.0", - "vfile": "^5.0.0" + "@types/unist": "^3.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-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, "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^3.0.0" + "@types/unist": "^3.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-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, "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", + "unist-util-is": "^6.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-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, - "engines": { - "node": ">=12" + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.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-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, "dependencies": { - "vfile-message": "^3.0.0" + "@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": "2.0.0", - "resolved": "https://registry.npmjs.org/vfile-statistics/-/vfile-statistics-2.0.0.tgz", - "integrity": "sha512-foOWtcnJhKN9M2+20AOTlWi2dxNfAoeNIoxD5GXcO182UJyId4QrXa41fWrgcfV3FWTjdEDy3I4cpLVcQscIMA==", + "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, "dependencies": { - "vfile-message": "^3.0.0" + "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, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "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, + "dependencies": { + "wrapped": "^1.0.1" }, "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=", + "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 }, - "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-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, "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" + "unist-util-visit-parents": "^2.0.0" } }, - "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-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, - "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" + "unist-util-is": "^3.0.0" } }, - "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-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, - "peer": true, - "engines": { - "node": ">=0.10.0" + "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/wrapped": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wrapped/-/wrapped-1.0.1.tgz", - "integrity": "sha1-x4PZ2Aeyc+mwHoUWgKk4yHyQckI=", + "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, "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-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 }, - "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-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, "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" + "@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" }, - "engines": { - "node": ">=6", - "npm": ">=5" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "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/zwitch": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.2.tgz", - "integrity": "sha512-JZxotl7SxAJH0j7dN4pxsTV6ZLXoLdGME+PsjkL/DaBrVryK9kTGq06GfKrwcSOqypP+fdXGoCHE36b99fWVoA==", + "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, + "dependencies": { + "@types/unist": "^3.0.0", + "trough": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "type": "opencollective", + "url": "https://opencollective.com/unified" } - } - }, - "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==", + }, + "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": { - "@babel/highlight": "^7.16.7" + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "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-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, - "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" + }, + "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-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": { - "regenerator-runtime": "^0.13.4" + "dependencies": { + "@types/unist": "^3.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-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, - "requires": { - "core-js-pure": "^3.20.2", - "regenerator-runtime": "^0.13.4" + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.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-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": { - "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": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "@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-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": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", - "minimatch": "^3.0.4" + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.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-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 + "dependencies": { + "@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" + } }, - "@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/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, + "dependencies": { + "@types/unist": "*" + } }, - "@sindresorhus/is": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", - "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", + "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 }, - "@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-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, - "requires": { - "defer-to-connect": "^1.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" } }, - "@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-list-item-bullet-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, - "requires": { - "@types/node": "*" + "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" } }, - "@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-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, - "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 + "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, + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } }, - "@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-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, - "requires": { - "@types/estree": "*" + "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/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/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 - }, - "@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-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 + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.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-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/unist": "*" + "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" } }, - "@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": "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-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, - "requires": { + "dependencies": { "@types/unist": "*" } }, - "@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==", + "node_modules/remark-lint-list-item-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 }, - "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-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" + } }, - "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-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, - "requires": {} + "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" + } }, - "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-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, + "dependencies": { + "@types/unist": "^3.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-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": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" + "dependencies": { + "@types/unist": "^3.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-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, - "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/unist": "^3.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-list-item-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, - "peer": true + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } }, - "ansi-regex": { + "node_modules/remark-lint-list-item-content-indent/node_modules/vfile": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "dev": true + "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" + } }, - "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-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": { - "color-convert": "^2.0.1" + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.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-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": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" + "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" } }, - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "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, + "dependencies": { + "@types/unist": "*" + } + }, + "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 }, - "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-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, - "peer": true, - "requires": { - "@babel/runtime": "^7.10.2", - "@babel/runtime-corejs3": "^7.10.2" + "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" } }, - "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-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, - "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", + "trough": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.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-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, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0" + "dependencies": { + "@types/unist": "^3.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-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, - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0" + "dependencies": { + "@types/unist": "^3.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-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 + "dependencies": { + "@types/unist": "^3.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-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, - "peer": true + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.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-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 - }, - "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 + "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" + } }, - "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 + "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" + } }, - "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-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": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "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" } }, - "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-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": { - "fill-range": "^7.0.1" + "dependencies": { + "@types/unist": "*" } }, - "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==", + "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 }, - "builtins": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-4.0.0.tgz", - "integrity": "sha512-qC0E2Dxgou1IHhvJSLwGDSTvokbRovU5zZFuDY6oY8Y2lF3nGt5Ad8YZK7GMtqzY84Wu7pXTPeHQeHcXSXsRhw==", + "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, - "requires": { - "semver": "^7.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" } }, - "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-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": { - "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", + "trough": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^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-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", - "get-intrinsic": "^1.0.2" + "dependencies": { + "@types/unist": "^3.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-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 - }, - "camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true + "dependencies": { + "@types/unist": "^3.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-list-item-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, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "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 + "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, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } }, - "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-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": { - "got": "^9.6.0", - "is-relative-url": "^2.0.0", - "p-map": "^2.0.0", - "p-memoize": "^2.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" } }, - "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-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, - "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", + "unist-util-stringify-position": "^4.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 + "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, + "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" + } }, - "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-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, - "requires": { - "mimic-response": "^1.0.0" + "dependencies": { + "@types/unist": "*" } }, - "co": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/co/-/co-3.1.0.tgz", - "integrity": "sha1-TqVOpaCJOBUxheFSEMaNkJK8G3g=", + "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 }, - "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-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": { - "color-name": "~1.1.4" + "dependencies": { + "@types/mdast": "^4.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 + "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, + "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" + } }, - "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-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, - "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", + "trough": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.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-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, - "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-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": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" + "dependencies": { + "@types/unist": "^3.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-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" + } }, - "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-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, - "requires": { - "ms": "2.1.2" + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.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-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, - "requires": { - "character-entities": "^2.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" } }, - "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-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": { - "mimic-response": "^1.0.0" + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.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-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, - "peer": true - }, - "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 + "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" + } }, - "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-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, - "requires": { - "object-keys": "^1.0.12" + "dependencies": { + "@types/unist": "*" } }, - "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==", + "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 }, - "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-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, - "requires": { - "@leichtgewicht/ip-codec": "^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" } }, - "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-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, - "requires": { - "dns-packet": "^5.2.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" } }, - "doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "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": { - "esutils": "^2.0.2" + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "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 + "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, + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } }, - "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 + "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, + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } }, - "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-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, - "requires": { - "once": "^1.4.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" } }, - "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-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": { - "ansi-colors": "^4.1.1" + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^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-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, - "requires": { - "is-arrayish": "^0.2.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" } }, - "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-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, - "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", + "unist-util-stringify-position": "^4.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-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, - "peer": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" + "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" } }, - "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-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, - "peer": true + "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" + } }, - "eslint": { - "version": "8.6.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.6.0.tgz", - "integrity": "sha512-UvxdOJ7mXFlw7iuHZA4jmzPaUqIw54mZrv+XPYKNbKdLR0et4rf60lIZUU9kiNtnzzMzGWxMV+tQ7uG7JG8DPw==", + "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, - "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": "*" } }, - "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-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 + }, + "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, - "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", + "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-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-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, - "requires": { - "debug": "^3.2.7", - "find-up": "^2.1.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" + } + }, + "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, "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" + }, + "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-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.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/unist": "^3.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-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, - "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": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "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==", + "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, - "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 - } + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "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==", + "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": {} + "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" + } }, - "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-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, - "peer": true, - "requires": { - "esrecurse": "^4.3.0", - "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" } }, - "eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "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": { - "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/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" } }, - "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-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, - "peer": true + "dependencies": { + "@types/unist": "*" + } }, - "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-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 + }, + "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, - "peer": true, - "requires": { - "acorn": "^8.7.0", - "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^3.1.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" } }, - "esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "node_modules/remark-lint-no-consecutive-blank-lines/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": { - "estraverse": "^5.1.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" } }, - "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-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, - "requires": { - "estraverse": "^5.2.0" + "dependencies": { + "@types/unist": "^3.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-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 + "dependencies": { + "@types/unist": "^3.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-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, - "peer": true + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } }, - "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==", + "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, - "peer": true + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^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-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, - "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" + } }, - "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-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, - "peer": true + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.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-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": { - "format": "^0.2.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" } }, - "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 - }, - "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==", + "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, - "peer": true, - "requires": { - "flat-cache": "^3.0.4" + "dependencies": { + "wrapped": "^1.0.1" + }, + "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-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": { - "to-regex-range": "^5.0.1" + "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-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": { - "locate-path": "^3.0.0" + "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" } }, - "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-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, - "peer": true, - "requires": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^4.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-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, - "peer": true + "dependencies": { + "@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" + } }, - "format": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/format/-/format-0.2.2.tgz", - "integrity": "sha1-1hcBB+nv3E7TDJ3DkBbflCtctYs=", - "dev": true + "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, + "dependencies": { + "@types/unist": "*" + } }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "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 }, - "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-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, - "optional": 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" + } }, - "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-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, - "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" + } }, - "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-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, - "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-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, - "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-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": { - "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-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, - "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 - }, - "glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "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": { - "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/unist": "^3.0.0", + "unist-util-stringify-position": "^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-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": { - "is-glob": "^4.0.1" + "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" } }, - "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-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, - "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": "*" } }, - "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, - "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" - } + "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 }, - "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-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, - "peer": true, - "requires": { - "function-bind": "^1.1.1" + "dependencies": { + "@types/mdast": "^4.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-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, - "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 + "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" + } }, - "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==", + "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, - "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" + } }, - "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-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, - "peer": true, - "requires": { - "has-symbols": "^1.0.2" + "dependencies": { + "@types/unist": "^3.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-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": { - "lru-cache": "^6.0.0" + "dependencies": { + "@types/unist": "^3.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-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, - "peer": true, - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.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-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": { - "builtins": "^4.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" } }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "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, - "peer": true + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } }, - "indent-string": { + "node_modules/remark-lint-no-emphasis-as-heading": { "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 - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "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": { - "once": "^1.3.0", - "wrappy": "1" + "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" } }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "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": "*" + } }, - "ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "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 }, - "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-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, - "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 + "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" + } }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "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" + } }, - "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-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, - "requires": { - "has-bigints": "^1.0.1" + "dependencies": { + "@types/unist": "^3.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-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, - "requires": { - "binary-extensions": "^2.0.0" + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.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-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.2", - "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-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-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 + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.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-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": { - "has": "^1.0.3" + "dependencies": { + "mdast-util-to-string": "^1.0.2", + "unified-lint-rule": "^1.0.0", + "unist-util-visit": "^1.0.0" } }, - "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-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==", "dev": true, - "peer": true, - "requires": { - "has-tostringtag": "^1.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 + "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, + "dependencies": { + "wrapped": "^1.0.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "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 }, - "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-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": { - "is-extglob": "^2.1.1" + "dependencies": { + "unist-util-visit-parents": "^2.0.0" } }, - "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-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, - "requires": { - "ip-regex": "^4.0.0" + "dependencies": { + "unist-util-is": "^3.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==", + "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, - "peer": true, - "requires": { - "has-tostringtag": "^1.0.0" + "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" } }, - "is-online": { - "version": "8.5.1", - "resolved": "https://registry.npmjs.org/is-online/-/is-online-8.5.1.tgz", - "integrity": "sha512-RKyTQx/rJqw2QOXHwy7TmXdlkpe0Hhj7GBsr6TQJaj4ebNOfameZCMspU5vYbwBBzJ2brWArdSvNVox6T6oCTQ==", + "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, - "requires": { - "got": "^9.6.0", - "p-any": "^2.0.0", - "p-timeout": "^3.0.0", - "public-ip": "^4.0.1" + "dependencies": { + "@types/unist": "*" } }, - "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==", + "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 }, - "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-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, - "peer": true, - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^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" } }, - "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-no-empty-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, - "requires": { - "is-absolute-url": "^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" } }, - "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-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, - "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-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, - "peer": true, - "requires": { - "has-tostringtag": "^1.0.0" + "dependencies": { + "@types/unist": "^3.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-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, - "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-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, - "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-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 + "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-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, + "dependencies": { + "@types/mdast": "^4.0.0", + "unified-lint-rule": "^3.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-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, - "requires": { - "argparse": "^2.0.1" + "dependencies": { + "@types/unist": "*" } }, - "json-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", - "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=", + "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 }, - "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==", + "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, - "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-file-name-articles/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-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, - "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-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, - "requires": { - "array-includes": "^3.1.3", - "object.assign": "^4.1.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" } }, - "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-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, - "requires": { - "json-buffer": "3.0.0" + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.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-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, - "peer": true + "dependencies": { + "@types/mdast": "^4.0.0", + "unified-lint-rule": "^3.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-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, - "peer": true, - "requires": { - "language-subtag-registry": "~0.3.2" + "dependencies": { + "@types/unist": "*" } }, - "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=", + "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 }, - "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-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, - "requires": { - "prelude-ls": "^1.2.1", - "type-check": "~0.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" } }, - "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-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, - "requires": { - "figgy-pudding": "^3.5.1", - "find-up": "^3.0.0", - "ini": "^1.3.5" + "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" } }, - "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": "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-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, - "requires": { - "import-meta-resolve": "^1.0.0", - "libnpmconfig": "^1.0.0" + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "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, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.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" } }, - "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-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, - "peer": true + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } }, - "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 + "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, + "dependencies": { + "@types/mdast": "^4.0.0", + "unified-lint-rule": "^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-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, - "peer": true, - "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" + "dependencies": { + "@types/unist": "*" } }, - "lowercase-keys": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", - "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", + "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 }, - "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-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, - "requires": { - "yallist": "^4.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" } }, - "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-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, - "requires": { - "p-defer": "^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" } }, - "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-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, - "requires": { - "mdast-util-mdx-expression": "^1.1.0" + "dependencies": { + "@types/unist": "^3.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-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, - "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", + "vfile-message": "^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-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, - "requires": { - "micromark-extension-frontmatter": "^1.0.0" + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "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-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": "^3.0.0" + "dependencies": { + "@types/mdast": "^4.0.0", + "unified-lint-rule": "^3.0.0" + }, + "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-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, - "requires": { - "@types/estree-jsx": "^0.0.1" - } + "dependencies": { + "@types/unist": "*" + } }, - "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-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, - "requires": { - "@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" + "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" } }, - "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-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, - "requires": { - "@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" - }, "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" - } - } + "@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" } }, - "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-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, - "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/unist": "^3.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-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, - "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": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "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-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, - "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", + "unist-util-stringify-position": "^4.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-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": { - "fault": "^2.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0" + "dependencies": { + "@types/mdast": "^4.0.0", + "unified-lint-rule": "^3.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-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, - "requires": { - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" + "dependencies": { + "@types/unist": "*" } }, - "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-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, - "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", + "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-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-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, - "requires": { - "micromark-util-character": "^1.0.0", - "micromark-util-types": "^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-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-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, - "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" + }, + "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-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, - "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", + "vfile-message": "^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-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, - "requires": { - "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-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-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": { - "micromark-util-symbol": "^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" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "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-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, - "requires": { - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" + "dependencies": { + "@types/unist": "*" } }, - "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-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, - "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-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, - "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-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, - "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-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, - "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-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, - "requires": { - "micromark-util-types": "^1.0.0" + "dependencies": { + "@types/unist": "^3.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-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, - "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-is": "^6.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-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, - "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", + "vfile-message": "^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 - }, - "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==", + "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, - "requires": { - "brace-expansion": "^1.1.7" + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.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 - }, - "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=", + "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, - "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 + "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" + } }, - "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/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, - "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 + "dependencies": { + "@types/unist": "*" + } }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "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 }, - "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==", + "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, - "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" + } }, - "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-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, - "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" + } }, - "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-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, - "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" + }, + "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-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, - "peer": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" + "dependencies": { + "@types/unist": "^3.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-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, - "peer": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "object.hasown": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.0.tgz", - "integrity": "sha512-MhjYRfj3GBlhSkDHo6QmvgjRLXQ2zndabdf3nX0yTyZK9rPfxb6uRpAac8HXNLy1GpqWtZ81Qh4v3uOls2sRAg==", + "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, - "peer": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "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-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, - "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", + "vfile-message": "^4.0.0" + }, + "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-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, - "requires": { - "wrappy": "1" + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "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-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, - "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": { + "@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" } }, - "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-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, - "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/unist": "*" } }, - "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 - }, - "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-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 }, - "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-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, - "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-heading-like-paragraph/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-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, - "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-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, - "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-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, - "requires": { - "p-finally": "^1.0.0" + "dependencies": { + "@types/unist": "^3.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 - }, - "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-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, - "peer": true, - "requires": { - "callsites": "^3.0.0" + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.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-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, - "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/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.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=", - "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 - }, - "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 - }, - "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-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, - "peer": true + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^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-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, - "peer": 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 + "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" + } }, - "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-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, - "peer": true + "dependencies": { + "@types/unist": "*" + } }, - "prepend-http": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", - "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", + "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 }, - "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==", + "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, - "peer": true, - "requires": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" + "dependencies": { + "@types/mdast": "^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-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, - "requires": { - "levenshtein-edit-distance": "^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" } }, - "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-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, - "requires": { - "dns-socket": "^4.2.2", - "got": "^9.6.0", - "is-ip": "^3.1.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" } }, - "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/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, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "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/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, - "peer": true + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } }, - "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==", + "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, - "peer": true + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } }, - "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/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, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.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" + } + }, + "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.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "requires": { + "fill-range": "^7.1.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.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "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": { @@ -9289,1308 +19831,7413 @@ "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "dev": true, "requires": { - "picomatch": "^2.2.1" + "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" + } + } + } + }, + "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": { + "@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" + } + } } }, - "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==", + "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, - "peer": 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" + } }, - "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-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, - "peer": true, "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" + "@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" + } + } } }, - "regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "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": { + "@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": { - "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==", + "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": { - "mdast-util-to-string": "^1.0.4", - "unified-lint-rule": "^1.0.2", - "unist-util-visit": "^1.3.0" + "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": { - "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" } }, - "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..2665b5d251 --- /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 behavior 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/build/.run/Tools Install.run.xml b/src/.run/schema.run.xml similarity index 58% rename from build/.run/Tools Install.run.xml rename to src/.run/schema.run.xml index a93ddf593d..e57b890d7b 100644 --- a/build/.run/Tools Install.run.xml +++ b/src/.run/schema.run.xml @@ -1,20 +1,20 @@  - - + \ No newline at end of file diff --git a/src/Directory.Build.props b/src/Directory.Build.props index 229c697956..27dfc49416 100644 --- a/src/Directory.Build.props +++ b/src/Directory.Build.props @@ -1,5 +1,7 @@ + net6.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..26598bfb17 --- /dev/null +++ b/src/Directory.Packages.props @@ -0,0 +1,42 @@ + + + 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..9fa4cc1283 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) @@ -51,8 +53,8 @@ public void AllArgsAreInHelp() private static bool IsNotInHelp(IReadOnlyDictionary lookup, string propertyName, string helpText) { - if (lookup.ContainsKey(propertyName)) - return !helpText.Contains(lookup[propertyName]); + if (lookup.TryGetValue(propertyName, out var value)) + return !helpText.Contains(value); return !helpText.Contains("/" + propertyName.ToLower()); } 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[] { "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..271d1babf9 --- /dev/null +++ b/src/GitVersion.BuildAgents/PublicAPI.Shipped.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.BuildAgents/PublicAPI.Unshipped.txt b/src/GitVersion.BuildAgents/PublicAPI.Unshipped.txt new file mode 100644 index 0000000000..7dc5c58110 --- /dev/null +++ b/src/GitVersion.BuildAgents/PublicAPI.Unshipped.txt @@ -0,0 +1 @@ +#nullable enable 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..897bb5e169 --- /dev/null +++ b/src/GitVersion.Configuration.Tests/Configuration/ConfigurationProviderTests.CanWriteOutEffectiveConfiguration.approved.txt @@ -0,0 +1,167 @@ +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: + mode: ContinuousDelivery + 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..a07d47d8c9 --- /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["feature"].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..fdfd126300 --- /dev/null +++ b/src/GitVersion.Configuration.Tests/GitVersion.Configuration.Tests.csproj @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + diff --git a/src/GitVersion.Configuration.Tests/Workflows/WorkflowsTests.cs b/src/GitVersion.Configuration.Tests/Workflows/WorkflowsTests.cs new file mode 100644 index 0000000000..801d5239c4 --- /dev/null +++ b/src/GitVersion.Configuration.Tests/Workflows/WorkflowsTests.cs @@ -0,0 +1,36 @@ +namespace GitVersion.Configuration.Tests.Configuration; + +[TestFixture] +public class WorkflowsTests +{ + private readonly ConfigurationSerializer serializer = new(); + + private static readonly object[][] Workflows = + [ + ["GitFlow/v1", GitFlowConfigurationBuilder.New], + ["GitHubFlow/v1", GitHubFlowConfigurationBuilder.New], + ["TrunkBased/preview1", TrunkBasedConfigurationBuilder.New] + ]; + + [Test(Description = "This test is to ensure that the configuration for workflow is up to date")] + [TestCaseSource(nameof(Workflows))] + public void CheckWorkflowsAreUpdated(string workflow, IConfigurationBuilder configurationBuilder) + { + var configuration = configurationBuilder.Build(); + + var serializedConfiguration = serializer.Serialize(configuration); + var segments = workflow.Split("/"); + var folderName = segments[0]; + var fileName = segments[^1]; + + serializedConfiguration.ShouldMatchApproved(builder => builder + .WithFilenameGenerator((_, _, type, extension) => FilenameGenerator(fileName, type, extension)) + .WithFileExtension("yml") + .SubFolder($"approved/{folderName}")); + } + + private static string FilenameGenerator(string fileName, string type, string ext) => + type == "approved" + ? $"{fileName}.{ext}" + : $"{fileName}.{type}.{ext}"; +} diff --git a/src/GitVersion.Configuration.Tests/Workflows/approved/GitFlow/v1.yml b/src/GitVersion.Configuration.Tests/Workflows/approved/GitFlow/v1.yml new file mode 100644 index 0000000000..f839b27b94 --- /dev/null +++ b/src/GitVersion.Configuration.Tests/Workflows/approved/GitFlow/v1.yml @@ -0,0 +1,167 @@ +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: + mode: ContinuousDelivery + 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/Workflows/approved/GitHubFlow/v1.yml b/src/GitVersion.Configuration.Tests/Workflows/approved/GitHubFlow/v1.yml new file mode 100644 index 0000000000..822fe7991f --- /dev/null +++ b/src/GitVersion.Configuration.Tests/Workflows/approved/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 + 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: 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 + track-merge-message: true + regex: ^features?[/-](?.+) + source-branches: + - main + - release + 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: + - main + - release + - feature + is-source-branch-for: [] + pre-release-weight: 30000 + unknown: + mode: ManualDeployment + label: '{BranchName}' + increment: Inherit + prevent-increment: + when-current-commit-tagged: false + track-merge-message: false + regex: (?.+) + source-branches: + - main + - release + - feature + - pull-request + 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/Workflows/approved/TrunkBased/preview1.yml b/src/GitVersion.Configuration.Tests/Workflows/approved/TrunkBased/preview1.yml new file mode 100644 index 0000000000..07012e4dd6 --- /dev/null +++ b/src/GitVersion.Configuration.Tests/Workflows/approved/TrunkBased/preview1.yml @@ -0,0 +1,101 @@ +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: +- ConfiguredNextVersion +- Mainline +branches: + main: + mode: ContinuousDeployment + 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 + feature: + mode: ContinuousDelivery + label: '{BranchName}' + increment: Minor + prevent-increment: + when-current-commit-tagged: false + track-merge-message: true + regex: ^features?[/-](?.+) + source-branches: + - main + is-source-branch-for: [] + is-main-branch: false + pre-release-weight: 30000 + hotfix: + mode: ContinuousDelivery + label: '{BranchName}' + increment: Patch + prevent-increment: + when-current-commit-tagged: false + regex: ^hotfix(es)?[/-](?.+) + source-branches: + - main + is-source-branch-for: [] + is-release-branch: 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+)' + track-merge-message: true + regex: ^(pull|pull\-requests|pr)[/-] + source-branches: + - main + - feature + - hotfix + is-source-branch-for: [] + pre-release-weight: 30000 + unknown: + increment: Patch + prevent-increment: + when-current-commit-tagged: false + regex: (?.+) + source-branches: + - main + is-source-branch-for: [] + 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: '' +source-branches: [] +is-source-branch-for: [] +tracks-release-branches: false +is-release-branch: false +is-main-branch: false 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..e29e124530 --- /dev/null +++ b/src/GitVersion.Configuration/Builders/GitFlowConfigurationBuilder.cs @@ -0,0 +1,212 @@ +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, + DeploymentMode = DeploymentMode.ContinuousDelivery, + 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..df18446214 --- /dev/null +++ b/src/GitVersion.Configuration/ConfigurationSerializer.cs @@ -0,0 +1,45 @@ +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 string GetEnumName(Type enumType, string name) => innerTypeDescriptor.GetEnumName(enumType, name); + + public override string GetEnumValue(object enumValue) => innerTypeDescriptor.GetEnumValue(enumValue); + + 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..75a9ad34e1 --- /dev/null +++ b/src/GitVersion.Configuration/GitVersion.Configuration.csproj @@ -0,0 +1,36 @@ + + + + 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..66f6115d77 --- /dev/null +++ b/src/GitVersion.Configuration/PublicAPI.Shipped.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/PublicAPI.Unshipped.txt b/src/GitVersion.Configuration/PublicAPI.Unshipped.txt new file mode 100644 index 0000000000..7dc5c58110 --- /dev/null +++ b/src/GitVersion.Configuration/PublicAPI.Unshipped.txt @@ -0,0 +1 @@ +#nullable enable 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..1fc0cd9df7 --- /dev/null +++ b/src/GitVersion.Core.Tests/IntegrationTests/DocumentationSamplesForGitFlow.cs @@ -0,0 +1,1249 @@ +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); + fixture.ApplyTag("2.0.0"); + fixture.AssertFullSemver("2.0.0", 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 FeatureFromDevelopBranch(bool withPullRequestIntoDevelop) + { + 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 to develop + fixture.BranchTo("develop", "develop"); + fixture.SequenceDiagram.Activate("develop"); + fixture.SequenceDiagram.Deactivate("main"); + fixture.AssertFullSemver("1.3.0-alpha.0", configuration); + + // Branch from develop to feature + const string branchName = "feature/foo"; + fixture.BranchTo(branchName, "feature"); + fixture.SequenceDiagram.Activate("feature"); + fixture.SequenceDiagram.Deactivate("develop"); + fixture.AssertFullSemver("1.3.0-foo.1+0", configuration); + fixture.MakeACommit(); + fixture.AssertFullSemver("1.3.0-foo.1+1", configuration); + + // Create hotfix on main branch + fixture.Checkout("main"); + fixture.SequenceDiagram.Activate("main"); + fixture.MakeACommit("+semver: minor"); + fixture.AssertFullSemver("1.3.0-1", configuration); + fixture.ApplyTag("1.3.0"); + fixture.AssertFullSemver("1.3.0", configuration); + + // Merge main to develop branch + fixture.MergeTo("develop"); + fixture.SequenceDiagram.Deactivate("main"); + fixture.SequenceDiagram.Activate("develop"); + fixture.AssertFullSemver("1.4.0-alpha.1", configuration); + + // Merge develop to feature branch + fixture.MergeTo(branchName); + fixture.SequenceDiagram.Deactivate("develop"); + fixture.AssertFullSemver("1.4.0-foo.1+3", configuration); + + // Bump to major version increment + fixture.MakeACommit("+semver: major"); + fixture.AssertFullSemver("2.0.0-foo.1+4", configuration); + + // Create pre-release on feature branch + fixture.ApplyTag("2.1.0-foo.1"); + fixture.AssertFullSemver("2.1.0-foo.2+0", configuration); + fixture.MakeACommit(); + fixture.AssertFullSemver("2.1.0-foo.2+1", configuration); + fixture.Checkout("develop"); + + if (withPullRequestIntoDevelop) + { + // Create a PullRequest into develop + 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("develop"); + fixture.Remove("pull/2/merge"); + } + + // Merge feature into develop branch + fixture.MergeNoFF(branchName); + fixture.Remove(branchName); + fixture.SequenceDiagram.NoteOver("Feature branches should\r\nbe deleted once merged", branchName); + fixture.AssertFullSemver("2.1.0-alpha.6", configuration); + + // Commit on develop branch + fixture.SequenceDiagram.Activate("develop"); + fixture.MakeACommit(); + fixture.AssertFullSemver("2.1.0-alpha.7", configuration); + } + + [TestCase(false)] + [TestCase(true)] + public void FeatureFromDevelopBranchWithMainline(bool withPullRequestIntoDevelop) + { + var configuration = GitFlowConfigurationBuilder.New + .WithNextVersion("1.2.0") + .WithVersionStrategies(VersionStrategies.ConfiguredNextVersion, VersionStrategies.Mainline) + .WithBranch("feature", builder => builder.WithIncrement(IncrementStrategy.Minor)) + .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 to develop + fixture.BranchTo("develop", "develop"); + fixture.SequenceDiagram.Activate("develop"); + fixture.SequenceDiagram.Deactivate("main"); + fixture.AssertFullSemver("1.3.0-alpha.0", configuration); + + // Branch from develop to feature + const string branchName = "feature/foo"; + fixture.BranchTo(branchName, "feature"); + fixture.SequenceDiagram.Activate("feature"); + fixture.SequenceDiagram.Deactivate("develop"); + fixture.AssertFullSemver("1.3.0-foo.1+0", configuration); + fixture.MakeACommit(); + fixture.AssertFullSemver("1.3.0-foo.1+1", configuration); + + // Create hotfix on main branch + fixture.Checkout("main"); + fixture.SequenceDiagram.Activate("main"); + fixture.MakeACommit("+semver: minor"); + fixture.AssertFullSemver("1.3.0-1", configuration); + + // Merge main to develop branch + fixture.MergeTo("develop"); + fixture.SequenceDiagram.Deactivate("main"); + fixture.SequenceDiagram.Activate("develop"); + fixture.AssertFullSemver("1.4.0-alpha.1", configuration); + + // Merge develop to feature branch + fixture.Checkout("main"); + fixture.MergeTo(branchName); + fixture.SequenceDiagram.Deactivate("develop"); + fixture.AssertFullSemver("1.4.0-foo.1+2", configuration); + + // Bump to major version increment + fixture.MakeACommit("+semver: major"); + fixture.AssertFullSemver("2.0.0-foo.1+3", configuration); + + // Create pre-release on feature branch + fixture.ApplyTag("2.1.0-foo.1"); + fixture.AssertFullSemver("2.1.0-foo.2+0", configuration); + fixture.MakeACommit(); + fixture.AssertFullSemver("2.1.0-foo.2+1", configuration); + fixture.Checkout("develop"); + + if (withPullRequestIntoDevelop) + { + // Create a PullRequest into develop + 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("develop"); + fixture.Remove("pull/2/merge"); + } + + // Merge feature into develop branch + fixture.MergeNoFF(branchName); + fixture.Remove(branchName); + fixture.SequenceDiagram.NoteOver("Feature branches should\r\nbe deleted once merged", branchName); + fixture.AssertFullSemver("2.1.0-alpha.6", configuration); + + // Commit on develop branch + fixture.SequenceDiagram.Activate("develop"); + fixture.MakeACommit(); + fixture.AssertFullSemver("2.1.0-alpha.7", 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); + fixture.ApplyTag("2.0.0"); + fixture.AssertFullSemver("2.0.0", 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); + fixture.ApplyTag("3.0.1"); + fixture.AssertFullSemver("3.0.1", 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); + fixture.ApplyTag("2.0.1"); + fixture.AssertFullSemver("2.0.1", 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); + fixture.ApplyTag("3.0.1"); + fixture.AssertFullSemver("3.0.1", 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); + fixture.ApplyTag("1.3.1"); + fixture.AssertFullSemver("1.3.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.0-6", configuration); + fixture.ApplyTag("2.1.0"); + fixture.AssertFullSemver("2.1.0", 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.ApplyTag("1.2.4"); + fixture.AssertFullSemver("1.2.4", configuration); + + fixture.Checkout("main"); + fixture.MergeNoFF("support/1.x"); + fixture.AssertFullSemver("2.0.2-2", configuration); + fixture.ApplyTag("2.0.2"); + fixture.AssertFullSemver("2.0.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..cba4301309 --- /dev/null +++ b/src/GitVersion.Core.Tests/IntegrationTests/DocumentationSamplesForGitHubFlow.cs @@ -0,0 +1,438 @@ +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); + fixture.ApplyTag("2.0.0"); + fixture.AssertFullSemver("2.0.0", 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); + fixture.ApplyTag("1.3.1"); + fixture.AssertFullSemver("1.3.1", 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); + fixture.ApplyTag("2.3.1"); + fixture.AssertFullSemver("2.3.1", 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.Tests/VersionConverters/ProjectFileUpdaterTests.cs b/src/GitVersion.Core.Tests/VersionConverters/ProjectFileUpdaterTests.cs deleted file mode 100644 index 39437b5365..0000000000 --- a/src/GitVersion.Core.Tests/VersionConverters/ProjectFileUpdaterTests.cs +++ /dev/null @@ -1,331 +0,0 @@ -using System.Xml.Linq; -using GitVersion.Core.Tests.Helpers; -using GitVersion.Extensions; -using GitVersion.Helpers; -using GitVersion.Logging; -using GitVersion.Model.Configuration; -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; - -[TestFixture] -[Parallelizable(ParallelScope.None)] -public class ProjectFileUpdaterTests : TestBase -{ - private IVariableProvider variableProvider; - private ILog log; - private IFileSystem fileSystem; - private IProjectFileUpdater projectFileUpdater; - private List logMessages; - - [SetUp] - public void Setup() - { - ShouldlyConfiguration.ShouldMatchApprovedDefaults.LocateTestMethodUsingAttribute(); - var sp = ConfigureServices(); - - this.logMessages = new List(); - this.log = new Log(new TestLogAppender(this.logMessages.Add)); - - this.fileSystem = sp.GetRequiredService(); - this.variableProvider = sp.GetRequiredService(); - this.projectFileUpdater = new ProjectFileUpdater(this.log, this.fileSystem); - } - - [Category(NoMono)] - [Description(NoMonoDescription)] - [TestCase("Microsoft.NET.Sdk")] - [TestCase("Microsoft.NET.Sdk.Worker")] - [TestCase("Microsoft.NET.Sdk.Web")] - [TestCase("Microsoft.NET.Sdk.WindowsDesktop")] - [TestCase("Microsoft.NET.Sdk.Razor")] - [TestCase("Microsoft.NET.Sdk.BlazorWebAssembly")] - public void CanUpdateProjectFileWithSdkProjectFileXml(string sdk) - { - var xml = $@" - - - Exe - netcoreapp3.1 - - -"; - var canUpdate = projectFileUpdater.CanUpdateProjectFile(XElement.Parse(xml)); - - canUpdate.ShouldBe(true); - logMessages.ShouldBeEmpty(); - } - - [TestCase(@" - - - Exe - netcoreapp3.1 - - -")] - [Category(NoMono)] - [Description(NoMonoDescription)] - public void CannotUpdateProjectFileWithIncorrectProjectSdk(string xml) - { - var canUpdate = projectFileUpdater.CanUpdateProjectFile(XElement.Parse(xml)); - - canUpdate.ShouldBe(false); - - 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'"); - } - - [TestCase(@" - - - Exe - netcoreapp3.1 - - -")] - [Category(NoMono)] - [Description(NoMonoDescription)] - public void CannotUpdateProjectFileWithMissingProjectSdk(string xml) - { - var canUpdate = projectFileUpdater.CanUpdateProjectFile(XElement.Parse(xml)); - - canUpdate.ShouldBe(false); - - 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'"); - } - - [TestCase(@" - - - Exe - netcoreapp3.1 - false - - -")] - [Category(NoMono)] - [Description(NoMonoDescription)] - public void CannotUpdateProjectFileWithoutAssemblyInfoGeneration(string xml) - { - var canUpdate = projectFileUpdater.CanUpdateProjectFile(XElement.Parse(xml)); - - canUpdate.ShouldBe(false); - - 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"); - } - - [TestCase(@" - - -")] - [Category(NoMono)] - [Description(NoMonoDescription)] - public void CannotUpdateProjectFileWithoutAPropertyGroup(string xml) - { - var canUpdate = projectFileUpdater.CanUpdateProjectFile(XElement.Parse(xml)); - - canUpdate.ShouldBe(false); - - 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?"); - } - - [TestCase(@" - - - Exe - netcoreapp3.1 - -" - )] - [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 xmlRoot = XElement.Parse(xml); - variables.AssemblySemVer.ShouldNotBeNull(); - ProjectFileUpdater.UpdateProjectVersionElement(xmlRoot, ProjectFileUpdater.AssemblyVersionElement, variables.AssemblySemVer); - - var expectedXml = XElement.Parse(@" - - - Exe - netcoreapp3.1 - 2.0.0.0 - -"); - xmlRoot.ToString().ShouldBe(expectedXml.ToString()); - } - - [TestCase(@" - - - Exe - netcoreapp3.1 - 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 xmlRoot = XElement.Parse(xml); - variables.AssemblySemVer.ShouldNotBeNull(); - ProjectFileUpdater.UpdateProjectVersionElement(xmlRoot, ProjectFileUpdater.AssemblyVersionElement, variables.AssemblySemVer); - - var expectedXml = XElement.Parse(@" - - - Exe - netcoreapp3.1 - 2.0.0.0 - -"); - xmlRoot.ToString().ShouldBe(expectedXml.ToString()); - } - - [TestCase(@" - - - Exe - netcoreapp3.1 - 1.0.0.0 - - - 1.0.0.0 - -" - )] - [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 xmlRoot = XElement.Parse(xml); - variables.AssemblySemVer.ShouldNotBeNull(); - ProjectFileUpdater.UpdateProjectVersionElement(xmlRoot, ProjectFileUpdater.AssemblyVersionElement, variables.AssemblySemVer); - - var expectedXml = XElement.Parse(@" - - - Exe - netcoreapp3.1 - 1.0.0.0 - - - 2.0.0.0 - -"); - xmlRoot.ToString().ShouldBe(expectedXml.ToString()); - } - - [TestCase(@" - - - Exe - netcoreapp3.1 - 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 xmlRoot = XElement.Parse(xml); - variables.AssemblySemVer.ShouldNotBeNull(); - ProjectFileUpdater.UpdateProjectVersionElement(xmlRoot, ProjectFileUpdater.AssemblyVersionElement, variables.AssemblySemVer); - - var expectedXml = XElement.Parse(@" - - - Exe - netcoreapp3.1 - 1.0.0.0 - 2.0.0.0 - -"); - xmlRoot.ToString().ShouldBe(expectedXml.ToString()); - } - - [TestCase(@" - - - Exe - netcoreapp3.1 - -")] - [Category(NoMono)] - [Description(NoMonoDescription)] - public void UpdateProjectFileAddsVersionToFile(string xml) - { - var fileName = PathHelper.Combine(Path.GetTempPath(), "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)); - - const string expectedXml = @" - - - Exe - netcoreapp3.1 - 2.3.1.0 - 2.3.1.0 - 2.3.1+3.Branch.foo.Sha.hash - 2.3.1 - -"; - var transformedXml = fs.ReadAllText(fileName); - transformedXml.ShouldBe(XElement.Parse(expectedXml).ToString()); - }); - } - - private void VerifyAssemblyInfoFile( - string projectFileContent, - string fileName, - AssemblyVersioningScheme versioningScheme = AssemblyVersioningScheme.MajorMinorPatch, - 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 - }; - - this.fileSystem.Exists(fileName).Returns(true); - this.fileSystem.ReadAllText(fileName).Returns(projectFileContent); - this.fileSystem.When(f => f.WriteAllText(fileName, Arg.Any())).Do(c => - { - projectFileContent = c.ArgAt(1); - this.fileSystem.ReadAllText(fileName).Returns(projectFileContent); - }); - - var config = new TestEffectiveConfiguration(versioningScheme); - var variables = this.variableProvider.GetVariablesFor(version, config, false); - - verify?.Invoke(this.fileSystem, variables); - } -} 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..e6827f7a0a --- /dev/null +++ b/src/GitVersion.Core/Configuration/IConfigurationBuilder.cs @@ -0,0 +1,8 @@ +namespace GitVersion.Configuration; + +public 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..78e07b591c 100644 --- a/src/GitVersion.Core/PublicAPI.Shipped.txt +++ b/src/GitVersion.Core/PublicAPI.Shipped.txt @@ -1,362 +1,327 @@ #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 +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.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.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(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.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.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.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.CommitDateFormat.get -> string? +GitVersion.Configuration.EffectiveConfiguration.CommitMessageIncrementing.get -> GitVersion.VersionCalculation.CommitMessageIncrementMode +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.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.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.PreventIncrementOfMergedBranch.get -> bool +GitVersion.Configuration.EffectiveConfiguration.PreventIncrementWhenBranchMerged.get -> bool +GitVersion.Configuration.EffectiveConfiguration.PreventIncrementWhenCurrentCommitTagged.get -> bool +GitVersion.Configuration.EffectiveConfiguration.RegularExpression.get -> string? +GitVersion.Configuration.EffectiveConfiguration.SemanticVersionFormat.get -> GitVersion.SemanticVersionFormat +GitVersion.Configuration.EffectiveConfiguration.TagPrefix.get -> string? +GitVersion.Configuration.EffectiveConfiguration.TagPreReleaseWeight.get -> int +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.IConfigurationBuilder +GitVersion.Configuration.IConfigurationBuilder.AddOverride(System.Collections.Generic.IReadOnlyDictionary! value) -> void +GitVersion.Configuration.IConfigurationBuilder.Build() -> GitVersion.Configuration.IGitVersionConfiguration! +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.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.TagPrefix.get -> string? +GitVersion.Configuration.IGitVersionConfiguration.TagPreReleaseWeight.get -> int? +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.ObjectExtensions +GitVersion.Extensions.IncrementStrategyExtensions 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.FileExtension.init -> void GitVersion.FileWriteInfo.FileName.get -> string! -GitVersion.FileWriteInfo.FileWriteInfo(string! workingDirectory, string! fileName, string! fileExtension) -> void +GitVersion.FileWriteInfo.FileName.init -> void +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.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.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.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.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() -> void GitVersion.GitVersionException.GitVersionException(string! message, System.Exception! innerException) -> void -GitVersion.GitVersionModule -GitVersion.GitVersionModule.GitVersionModule() -> void +GitVersion.GitVersionException.GitVersionException(string! message) -> void +GitVersion.GitVersionException.GitVersionException(string! messageFormat, params object![]! args) -> void GitVersion.GitVersionOptions -GitVersion.GitVersionOptions.AssemblyInfo.get -> GitVersion.AssemblyInfoData! -GitVersion.GitVersionOptions.Authentication.get -> GitVersion.AuthenticationInfo! -GitVersion.GitVersionOptions.ConfigInfo.get -> GitVersion.ConfigInfo! +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.Init -> bool GitVersion.GitVersionOptions.IsHelp -> bool GitVersion.GitVersionOptions.IsVersion -> bool GitVersion.GitVersionOptions.LogFilePath -> string? -GitVersion.GitVersionOptions.Output -> System.Collections.Generic.ISet! +GitVersion.GitVersionOptions.Output -> System.Collections.Generic.ISet! GitVersion.GitVersionOptions.OutputFile -> string? GitVersion.GitVersionOptions.RepositoryInfo.get -> GitVersion.RepositoryInfo! GitVersion.GitVersionOptions.Settings.get -> GitVersion.Settings! @@ -365,22 +330,16 @@ 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.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.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 @@ -388,24 +347,8 @@ 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.IConverterContext +GitVersion.IConverterContext.WorkingDirectory.get -> string! GitVersion.IEnvironment GitVersion.IEnvironment.GetEnvironmentVariable(string! variableName) -> string? GitVersion.IEnvironment.SetEnvironmentVariable(string! variableName, string? value) -> void @@ -420,107 +363,32 @@ 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.IFileSystem.WriteAllText(string? file, string! fileContents) -> void GitVersion.IGitPreparer -GitVersion.IGitPreparer.EnsureLocalBranchExistsForCurrentBranch(GitVersion.IRemote! remote, string! currentBranch) -> void +GitVersion.IGitPreparer.EnsureLocalBranchExistsForCurrentBranch(GitVersion.Git.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.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.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.IVersionConverter +GitVersion.IVersionConverter.Execute(GitVersion.OutputVariables.GitVersionVariables! variables, T context) -> void GitVersion.LockedFileException +GitVersion.LockedFileException.LockedFileException() -> void +GitVersion.LockedFileException.LockedFileException(string? message, System.Exception? innerException) -> void +GitVersion.LockedFileException.LockedFileException(string? message) -> void 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! @@ -530,19 +398,12 @@ 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.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 @@ -553,15 +414,6 @@ 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 @@ -571,778 +423,362 @@ 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.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.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.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.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.BuildMetaData.get -> GitVersion.SemanticVersionBuildMetaData! +GitVersion.SemanticVersion.BuildMetaData.init -> void +GitVersion.SemanticVersion.CompareTo(GitVersion.SemanticVersion? value, bool includePreRelease) -> int +GitVersion.SemanticVersion.CompareTo(GitVersion.SemanticVersion? value) -> int GitVersion.SemanticVersion.Equals(GitVersion.SemanticVersion? obj) -> bool -GitVersion.SemanticVersion.IncrementVersion(GitVersion.VersionField incrementStrategy) -> GitVersion.SemanticVersion! +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.Major -> long -GitVersion.SemanticVersion.Minor -> long -GitVersion.SemanticVersion.Patch -> long -GitVersion.SemanticVersion.PreReleaseTag -> GitVersion.SemanticVersionPreReleaseTag? -GitVersion.SemanticVersion.SemanticVersion(GitVersion.SemanticVersion? semanticVersion) -> void +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 -> string? -GitVersion.SemanticVersionBuildMetaData.CommitDate -> System.DateTimeOffset? -GitVersion.SemanticVersionBuildMetaData.CommitsSinceTag -> long? -GitVersion.SemanticVersionBuildMetaData.CommitsSinceVersionSource -> long? +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 -> string? +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, 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.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 -> long -GitVersion.SemanticVersionBuildMetaData.VersionSourceSha -> 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.BuildMetaDataPadded.get -> string? +GitVersion.SemanticVersionFormatValues.BuildMetaData.get -> string! GitVersion.SemanticVersionFormatValues.CommitDate.get -> string? -GitVersion.SemanticVersionFormatValues.CommitsSinceVersionSource.get -> string? -GitVersion.SemanticVersionFormatValues.CommitsSinceVersionSourcePadded.get -> string? -GitVersion.SemanticVersionFormatValues.DefaultInformationalVersion.get -> string! +GitVersion.SemanticVersionFormatValues.CommitsSinceVersionSource.get -> string! GitVersion.SemanticVersionFormatValues.EscapedBranchName.get -> string? -GitVersion.SemanticVersionFormatValues.FullBuildMetaData.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.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.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.Name.get -> string! +GitVersion.SemanticVersionPreReleaseTag.Name.init -> void GitVersion.SemanticVersionPreReleaseTag.Number.get -> long? -GitVersion.SemanticVersionPreReleaseTag.Number.set -> void -GitVersion.SemanticVersionPreReleaseTag.PromotedFromCommits.get -> bool? -GitVersion.SemanticVersionPreReleaseTag.PromotedFromCommits.set -> void +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) -> 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.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.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.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.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.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.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.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.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.VersionCalculation.NextVersion! +GitVersion.VersionCalculation.INextVersionCalculator.FindVersion() -> GitVersion.SemanticVersion! GitVersion.VersionCalculation.IVariableProvider -GitVersion.VersionCalculation.IVariableProvider.GetVariablesFor(GitVersion.SemanticVersion! semanticVersion, GitVersion.Model.Configuration.EffectiveConfiguration! config, bool isCurrentCommitTagged) -> GitVersion.OutputVariables.VersionVariables! +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.BaseVersion! version, out string? reason) -> bool +GitVersion.VersionCalculation.IVersionFilter.Exclude(GitVersion.VersionCalculation.IBaseVersion! baseVersion, 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.IVersionStrategy.GetBaseVersions(GitVersion.Configuration.EffectiveBranchConfiguration! configuration) -> System.Collections.Generic.IEnumerable! 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.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.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.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.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.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.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() -> void GitVersion.WarningException.WarningException(string! message) -> void +GitVersion.WarningException.WarningException(string? message, System.Exception? innerException) -> 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! +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.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.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.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.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! -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.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.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.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.ArgumentRequiresValue(this string! argument, int argumentIndex) -> bool +static GitVersion.Extensions.StringExtensions.IsEmpty(this string? value) -> 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.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(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 @@ -1352,7 +788,6 @@ static GitVersion.Logging.LogExtensions.Error(this GitVersion.Logging.ILog! log, 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 @@ -1369,21 +804,15 @@ static GitVersion.Logging.LogExtensions.Warning(this GitVersion.Logging.ILog! lo 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.MergeMessage.TryParse(GitVersion.Git.ICommit! mergeCommit, GitVersion.Configuration.IGitVersionConfiguration! configuration, out GitVersion.MergeMessage? mergeMessage) -> 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.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.SemanticVersion.Parse(string! version, string? tagPrefixRegex, GitVersion.SemanticVersionFormat versionFormat = GitVersion.SemanticVersionFormat.Strict) -> GitVersion.SemanticVersion! +static GitVersion.SemanticVersion.TryParse(string! version, string? tagPrefixRegex, out GitVersion.SemanticVersion? semanticVersion, GitVersion.SemanticVersionFormat format = GitVersion.SemanticVersionFormat.Strict) -> 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 @@ -1398,19 +827,14 @@ static GitVersion.SemanticVersionPreReleaseTag.operator ==(GitVersion.SemanticVe 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! +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/PublicAPI.Unshipped.txt b/src/GitVersion.Core/PublicAPI.Unshipped.txt index e69de29bb2..7dc5c58110 100644 --- a/src/GitVersion.Core/PublicAPI.Unshipped.txt +++ b/src/GitVersion.Core/PublicAPI.Unshipped.txt @@ -0,0 +1 @@ +#nullable enable 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..eb528f0253 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(versionWithTags => versionWithTags) + .Where(versionWithTag => versionWithTag.Value.IsMatchForBranchSpecificLabel(label)) + .Select(versionWithTag => versionWithTag.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..b3106ca70c 100644 --- a/src/GitVersion.LibGit2Sharp/PublicAPI.Shipped.txt +++ b/src/GitVersion.LibGit2Sharp/PublicAPI.Shipped.txt @@ -2,18 +2,3 @@ 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..7dc5c58110 100644 --- a/src/GitVersion.LibGit2Sharp/PublicAPI.Unshipped.txt +++ b/src/GitVersion.LibGit2Sharp/PublicAPI.Unshipped.txt @@ -0,0 +1 @@ +#nullable enable 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..f709d21896 100644 --- a/src/GitVersion.MsBuild.Tests/GitVersion.MsBuild.Tests.csproj +++ b/src/GitVersion.MsBuild.Tests/GitVersion.MsBuild.Tests.csproj @@ -1,49 +1,37 @@ - - 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..cd922f14c1 100644 --- a/src/GitVersion.MsBuild/GitVersion.MsBuild.csproj +++ b/src/GitVersion.MsBuild/GitVersion.MsBuild.csproj @@ -1,8 +1,6 @@ - netstandard2.0 - GitVersion.MsBuild GitVersionMsBuild 0.0.1-alpha-0001 @@ -10,24 +8,38 @@ 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..b395a292de 100644 --- a/src/GitVersion.MsBuild/PublicAPI.Shipped.txt +++ b/src/GitVersion.MsBuild/PublicAPI.Shipped.txt @@ -1,6 +1,8 @@ #nullable enable abstract GitVersion.MsBuild.GitVersionTaskBase.OnExecute() -> bool -GitVersion.MsBuild.FileHelper +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 @@ -9,28 +11,13 @@ 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.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.GitVersionTaskBase.WithOverrides(System.Action! overrides) -> void GitVersion.MsBuild.Tasks.GenerateGitVersionInformation GitVersion.MsBuild.Tasks.GenerateGitVersionInformation.GenerateGitVersionInformation() -> void GitVersion.MsBuild.Tasks.GenerateGitVersionInformation.GitVersionInformationFilePath.get -> string! @@ -41,6 +28,10 @@ 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.GenerateGitVersionInformation.RootNamespace.get -> string! +GitVersion.MsBuild.Tasks.GenerateGitVersionInformation.RootNamespace.set -> void +GitVersion.MsBuild.Tasks.GenerateGitVersionInformation.UseProjectNamespaceForGitVersionInformation.get -> string? +GitVersion.MsBuild.Tasks.GenerateGitVersionInformation.UseProjectNamespaceForGitVersionInformation.set -> void GitVersion.MsBuild.Tasks.GetVersion GitVersion.MsBuild.Tasks.GetVersion.AssemblySemFileVer.get -> string! GitVersion.MsBuild.Tasks.GetVersion.AssemblySemFileVer.set -> void @@ -50,14 +41,10 @@ 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! @@ -67,24 +54,12 @@ 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! @@ -127,12 +102,3 @@ override GitVersion.MsBuild.Tasks.GenerateGitVersionInformation.OnExecute() -> b 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..7dc5c58110 100644 --- a/src/GitVersion.MsBuild/PublicAPI.Unshipped.txt +++ b/src/GitVersion.MsBuild/PublicAPI.Unshipped.txt @@ -0,0 +1 @@ +#nullable enable 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.Output.Tests/Output/ProjectFileUpdaterTests.cs b/src/GitVersion.Output.Tests/Output/ProjectFileUpdaterTests.cs new file mode 100644 index 0000000000..0eff6f3bb9 --- /dev/null +++ b/src/GitVersion.Output.Tests/Output/ProjectFileUpdaterTests.cs @@ -0,0 +1,323 @@ +using System.Xml.Linq; +using GitVersion.Configuration; +using GitVersion.Core.Tests.Helpers; +using GitVersion.Helpers; +using GitVersion.Logging; +using GitVersion.Output.AssemblyInfo; +using GitVersion.OutputVariables; +using GitVersion.VersionCalculation; +using Microsoft.Extensions.DependencyInjection; + +namespace GitVersion.Core.Tests; + +[TestFixture] +[Parallelizable(ParallelScope.None)] +public class ProjectFileUpdaterTests : TestBase +{ + private const string TargetFramework = "net8.0"; + private IVariableProvider variableProvider; + private ILog log; + private IFileSystem fileSystem; + private IProjectFileUpdater projectFileUpdater; + private List logMessages; + + [SetUp] + public void Setup() + { + ShouldlyConfiguration.ShouldMatchApprovedDefaults.LocateTestMethodUsingAttribute(); + var sp = ConfigureServices(); + + this.logMessages = []; + this.log = new Log(new TestLogAppender(this.logMessages.Add)); + + this.fileSystem = sp.GetRequiredService(); + this.variableProvider = sp.GetRequiredService(); + this.projectFileUpdater = new ProjectFileUpdater(this.log, this.fileSystem); + } + + [TearDown] + public void Teardown() => this.projectFileUpdater.Dispose(); + + [TestCase("Microsoft.NET.Sdk")] + [TestCase("Microsoft.NET.Sdk.Worker")] + [TestCase("Microsoft.NET.Sdk.Web")] + [TestCase("Microsoft.NET.Sdk.WindowsDesktop")] + [TestCase("Microsoft.NET.Sdk.Razor")] + [TestCase("Microsoft.NET.Sdk.BlazorWebAssembly")] + public void CanUpdateProjectFileWithSdkProjectFileXml(string sdk) + { + var xml = $""" + + + Exe + {TargetFramework} + + + """; + var canUpdate = projectFileUpdater.CanUpdateProjectFile(XElement.Parse(xml)); + + canUpdate.ShouldBe(true); + logMessages.ShouldBeEmpty(); + } + + [TestCase($""" + + + Exe + {TargetFramework} + + + """)] + public void CannotUpdateProjectFileWithIncorrectProjectSdk(string xml) + { + var canUpdate = projectFileUpdater.CanUpdateProjectFile(XElement.Parse(xml)); + + canUpdate.ShouldBe(false); + + logMessages.ShouldNotBeEmpty(); + logMessages.Count.ShouldBe(1); + logMessages[0].ShouldContain("Specified project file Sdk (SomeOtherProject.Sdk) is not supported, please ensure the project sdk starts with 'Microsoft.NET.Sdk'"); + } + + [TestCase($""" + + + Exe + {TargetFramework} + + + """)] + public void CannotUpdateProjectFileWithMissingProjectSdk(string xml) + { + var canUpdate = projectFileUpdater.CanUpdateProjectFile(XElement.Parse(xml)); + + canUpdate.ShouldBe(false); + + logMessages.ShouldNotBeEmpty(); + logMessages.Count.ShouldBe(1); + logMessages[0].ShouldContain("Specified project file Sdk () is not supported, please ensure the project sdk starts with 'Microsoft.NET.Sdk'"); + } + + [TestCase($""" + + + Exe + {TargetFramework} + false + + + """)] + public void CannotUpdateProjectFileWithoutAssemblyInfoGeneration(string xml) + { + var canUpdate = projectFileUpdater.CanUpdateProjectFile(XElement.Parse(xml)); + + canUpdate.ShouldBe(false); + + logMessages.ShouldNotBeEmpty(); + logMessages.Count.ShouldBe(1); + logMessages[0].ShouldContain("Project file specifies false: versions set in this project file will not affect the output artifacts"); + } + + [TestCase(""" + + + """)] + public void CannotUpdateProjectFileWithoutAPropertyGroup(string xml) + { + var canUpdate = projectFileUpdater.CanUpdateProjectFile(XElement.Parse(xml)); + + canUpdate.ShouldBe(false); + + logMessages.ShouldNotBeEmpty(); + logMessages.Count.ShouldBe(1); + logMessages[0].ShouldContain("Unable to locate any elements in specified project file. Are you sure it is in a correct format?"); + } + + [TestCase($""" + + + Exe + {TargetFramework} + + + """ + )] + public void UpdateProjectXmlVersionElementWithStandardXmlInsertsElement(string xml) + { + 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); + + const string projectFileContent = $""" + + + Exe + {TargetFramework} + 2.0.0.0 + + + """; + var expectedXml = XElement.Parse(projectFileContent); + xmlRoot.ToString().ShouldBe(expectedXml.ToString()); + } + + [TestCase($""" + + + Exe + {TargetFramework} + 1.0.0.0 + + + """ + )] + public void UpdateProjectXmlVersionElementWithStandardXmlModifiesElement(string xml) + { + 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); + + var projectFileContent = $""" + + + Exe + {TargetFramework} + 2.0.0.0 + + + """; + var expectedXml = XElement.Parse(projectFileContent); + xmlRoot.ToString().ShouldBe(expectedXml.ToString()); + } + + [TestCase($""" + + + Exe + {TargetFramework} + 1.0.0.0 + + + 1.0.0.0 + + + """ + )] + public void UpdateProjectXmlVersionElementWithDuplicatePropertyGroupsModifiesLastElement(string xml) + { + 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); + + var projectFileContent = $""" + + + Exe + {TargetFramework} + 1.0.0.0 + + + 2.0.0.0 + + + """; + var expectedXml = XElement.Parse(projectFileContent); + xmlRoot.ToString().ShouldBe(expectedXml.ToString()); + } + + [TestCase($""" + + + Exe + {TargetFramework} + 1.0.0.0 + 1.0.0.0 + + + """ + )] + public void UpdateProjectXmlVersionElementWithMultipleVersionElementsLastOneIsModified(string xml) + { + 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); + + var projectFileContent = $""" + + + Exe + {TargetFramework} + 1.0.0.0 + 2.0.0.0 + + + """; + var expectedXml = XElement.Parse(projectFileContent); + xmlRoot.ToString().ShouldBe(expectedXml.ToString()); + } + + [TestCase(""" + + + + Exe + net8.0 + + + """)] + public void UpdateProjectFileAddsVersionToFile(string xml) + { + 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(workingDirectory, false, fileName)); + + const string expectedXml = $""" + + + Exe + {TargetFramework} + 2.3.1.0 + 2.3.1.0 + 2.3.1+3.Branch.foo.Sha.hash + 2.3.1 + + + """; + var transformedXml = fs.ReadAllText(fileName); + transformedXml.ShouldBe(XElement.Parse(expectedXml).ToString()); + }); + } + + private void VerifyAssemblyInfoFile( + string projectFileContent, + string fileName, + AssemblyVersioningScheme versioningScheme = AssemblyVersioningScheme.MajorMinorPatch, + Action? verify = null) + { + this.fileSystem = Substitute.For(); + 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(projectFileContent); + this.fileSystem.When(f => f.WriteAllText(fileName, Arg.Any())).Do(c => + { + projectFileContent = c.ArgAt(1); + this.fileSystem.ReadAllText(fileName).Returns(projectFileContent); + }); + + 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..52f0ea6886 --- /dev/null +++ b/src/GitVersion.Output/PublicAPI.Shipped.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 diff --git a/src/GitVersion.Output/PublicAPI.Unshipped.txt b/src/GitVersion.Output/PublicAPI.Unshipped.txt new file mode 100644 index 0000000000..7dc5c58110 --- /dev/null +++ b/src/GitVersion.Output/PublicAPI.Unshipped.txt @@ -0,0 +1 @@ +#nullable enable 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..df5047a785 --- /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..778863663f 100644 --- a/tests/scripts/test-global-tool.sh +++ b/tests/scripts/test-global-tool.sh @@ -1,5 +1,5 @@ #!/usr/bin/sh -# sh /scripts/test-global-tool.sh --version 5.7.1-beta1.56 --nugetPath /nuget --repoPath /repo +# sh /scripts/test-global-tool.sh --version 6.0.0 --nugetPath /nuget --repoPath /repo while test "$#" -gt 0 do case $1 in @@ -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..81aa2d9314 100644 --- a/tests/scripts/test-native-tool.sh +++ b/tests/scripts/test-native-tool.sh @@ -1,5 +1,5 @@ #!/usr/bin/sh -# sh /scripts/test-native-tool.sh --version 5.7.1-beta1-56 --runtime linux-musl-x64 /nuget --repoPath /repo +# sh /scripts/test-native-tool.sh --version 6.0.0 --runtime linux-musl-x64 /nuget --repoPath /repo while test "$#" -gt 0 do case $1 in @@ -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