GitTools / GitTools/GitVersion
Remove feature-selector environment variables
Nobody has claimed this yet.
- Dominant language
- C#
- Stars
- 3.1k
- Forks
- 659
- Avg merge
- 13h 15m
- Merged PRs (30d)
- 51
Description
Summary
Remove the v7 compatibility selector environment variables in GitVersion v8 after their legacy implementations have been removed in v7.1.
This is the final cleanup following the v7 feature-selector alignment issue.
Progress
- Complete prerequisite #5135 — v7.0 selector alignment.
- Complete prerequisite #5188 — v7.1 legacy parser/configuration runtime removal.
- Complete prerequisite #5040 — remove LibGit2Sharp and native binaries.
- Remove all three compatibility selectors and their selection abstractions in v8.
- Register the fixed implementations directly and retain
gitversion config migrate. - Add actionable diagnostics and tests for retired environment variables.
- Update v8 breaking-change and migration documentation.
Remove
GITVERSION_ARGUMENT_PARSER_VERSIONGITVERSION_CONFIGURATION_VERSIONGITVERSION_GIT_BACKEND- Selector types, parsing, validation, logging branches, compatibility diagnostics, and tests that exist only for these variables.
GitVersion v8 has one implementation for each concern:
- POSIX argument parser
- Nested
calculation/outputconfiguration - Managed Git backend
Register and use those implementations directly rather than passing through feature-selector abstractions.
Behavior
- The three retired variables no longer influence execution.
- Prefer failing fast with a clear removal message when a retired variable is set, rather than silently accepting stale deployment configuration.
- Remove the per-selector informational log lines where they no longer communicate a choice. Retain ordinary diagnostic information where useful, such as identifying the managed Git implementation.
- Keep
gitversion config migrateavailable for converting old configuration files; migration support does not imply runtime support for the v6 configuration format.
Acceptance criteria
- No production selection code reads the three variables.
- No compatibility selector abstractions or no-op selection branches remain.
- Packaging contains no LibGit2Sharp/native backend artifacts.
- Legacy argument parsing and legacy configuration loading remain unavailable.
- Tests verify actionable diagnostics when retired variables are supplied.
- v8 breaking-change and migration documentation lists the removed variables and fixed implementations.
Cleanup inventory from the v7.0 selector branch
The following inventory comes from arturcic:feature/v7-feature-selectors at 54adbb24e, the implementation of #5135. Implementation PR: #5189, opened from the fork after all four fork workflows passed on that commit. The inventory describes the PR branch; completion of #5135 remains a prerequisite until the PR is merged.
Production inventory for v8 selector removal
- Remove selection-only code in
src/GitVersion.App/ArgumentParserVersion.cs,src/GitVersion.Core/Configuration/ConfigurationVersion.csandsrc/GitVersion.Core/Git/GitBackend.csafter #5188/#5040 have removed the legacy implementations. - Remove
src/GitVersion.Core/FeatureSelector.csonce it has no consumers, and remove its explicit source link fromnew-cli/GitVersion.Common/GitVersion.Common.csprojtogether with obsolete source-linked selectors. Build both solution trees to catch dangling links. - Remove or simplify
src/GitVersion.App/FeatureSelections.csand its registration/logging throughCliHost.csandGitVersionApp.cs; register fixed implementations directly. Retain ordinary implementation diagnostics where useful. - Update
GitVersionCacheKeyFactoryand any remaining configuration serializer/provider/override consumers ofConfigurationVersionSelector. Preserve configuration-version/cache compatibility where still necessary independently of environment-variable selection. - Keep the minimal retired-variable detection needed for actionable errors, separately from runtime selection. Include the old
GITVERSION_USE_V6_ARGUMENT_PARSERboolean in the retirement policy instead of leaving a dangling replacement message pointing at a selector that v8 has itself removed. - Keep
Program.csclean stderr startup errors, migration's root-level--log-filesupport andServiceCollectionExtensionsmachine-readable-output isolation. These behaviors must survive removal of selector-specific logging.
Tests to adapt rather than indiscriminately delete
- Retire success/normalization tests that exist only for the removed variables in
GitBackendSelectorTests,ConfigurationVersionSelectorTestsandFeatureSelectorTests. Replace their selector-routing assertions with fixed-implementation composition tests. - Remove
SelectionLogUsesCapturedValueswhen the selection snapshot is removed; retain any ordinary logging behavior under a suitable test. - Adapt
ExecFeatureSelectorTests: remove selector permutation setup fromSelectorCombinationsCalculateAndLogWithoutPollutingOutputandMigrationRetainsYamlStdoutWithEitherConfigurationAndBackend, while retaining JSON, single-variable, show-config and flat-input migration output-isolation regressions. - Rewrite
InvalidSelectorsFailBeforeHelpWithActionableStderrfor the v8 retired-variable policy. Cover all three retired variables, explicit formerly valid values, unknown values and empty values; diagnostics must name the retired variable and explain that only the v7 parser/nested configuration/managed Git remain, without offering v6/libgit2 or removed selectors as a workaround. - Adapt
DefaultsSelectV7AndManagedWithConsoleLogsOnStderrto assert fixed runtime behavior and any retained logging, without expecting informational choice messages that no longer represent a choice. - Keep migration from flat v6 input supported and tested even though neither v6 runtime loading nor selector variables remain.
Sweep the branch's updated BREAKING_CHANGES.md, migration guide, CLI arguments, environment-variable reference and managed-Git design document. Describe retired variables as removals; remove temporary-fallback setup instructions from current v8 guidance while preserving historical v7 documentation where appropriate.
Output-isolation regression added during #5189 review
- Preserve the
buildServerdimension inExecFeatureSelectorTests.SelectorCombinationsCalculateAndLogWithoutPollutingOutput: JSON, single-variable and show-config stdout must stay free of diagnostics even when build-server output is also selected. This dimension is independent of the parser/configuration/backend selectors being retired. - Retain consistent stderr routing for console logs in
ServiceCollectionExtensions.ConfigureLogger. Build-server integration commands keep their existing output channel; diagnostic logs must not move back to stdout during cleanup. - Keep CLI help (
ArgumentParserand, until legacy removal,legacy_help.md) and the CLI/migration documentation consistent with stderr logging.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start by reviewing the prerequisite issues and the selector inventory, then inspect src/GitVersion.App/ArgumentParserVersion.cs, src/GitVersion.Core/Configuration/ConfigurationVersion.cs, src/GitVersion.Core/Git/GitBackend.cs, FeatureSelections.cs, and the referenced selector tests. Run the affected solution trees and ExecFeatureSelectorTests; completion means fixed implementations are registered, retired variables produce actionable errors, migration and output isolation still work, and v8 documentation is updated.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- csharp, git
- Domain
- cli, documentation, testing-qa, tooling
- Issue type
- Refactor
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100