Skip to content

Remove feature-selector environment variables #5136

Description

@arturcic

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

Remove

  • GITVERSION_ARGUMENT_PARSER_VERSION
  • GITVERSION_CONFIGURATION_VERSION
  • GITVERSION_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/output configuration
  • 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 migrate available 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.cs and src/GitVersion.Core/Git/GitBackend.cs after v7.1: remove legacy argument parser and v6 configuration runtime #5188/v7.1: remove LibGit2Sharp and native binaries #5040 have removed the legacy implementations.
  • Remove src/GitVersion.Core/FeatureSelector.cs once it has no consumers, and remove its explicit source link from new-cli/GitVersion.Common/GitVersion.Common.csproj together with obsolete source-linked selectors. Build both solution trees to catch dangling links.
  • Remove or simplify src/GitVersion.App/FeatureSelections.cs and its registration/logging through CliHost.cs and GitVersionApp.cs; register fixed implementations directly. Retain ordinary implementation diagnostics where useful.
  • Update GitVersionCacheKeyFactory and any remaining configuration serializer/provider/override consumers of ConfigurationVersionSelector. 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_PARSER boolean in the retirement policy instead of leaving a dangling replacement message pointing at a selector that v8 has itself removed.
  • Keep Program.cs clean stderr startup errors, migration's root-level --log-file support and ServiceCollectionExtensions machine-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, ConfigurationVersionSelectorTests and FeatureSelectorTests. Replace their selector-routing assertions with fixed-implementation composition tests.
  • Remove SelectionLogUsesCapturedValues when the selection snapshot is removed; retain any ordinary logging behavior under a suitable test.
  • Adapt ExecFeatureSelectorTests: remove selector permutation setup from SelectorCombinationsCalculateAndLogWithoutPollutingOutput and MigrationRetainsYamlStdoutWithEitherConfigurationAndBackend, while retaining JSON, single-variable, show-config and flat-input migration output-isolation regressions.
  • Rewrite InvalidSelectorsFailBeforeHelpWithActionableStderr for 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 DefaultsSelectV7AndManagedWithConsoleLogsOnStderr to 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 buildServer dimension in ExecFeatureSelectorTests.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 (ArgumentParser and, until legacy removal, legacy_help.md) and the CLI/migration documentation consistent with stderr logging.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions