Skip to content

v7.1: remove LibGit2Sharp and native binaries #5040

Description

@arturcic

Summary

Remove LibGit2Sharp and all shipped native Git binaries in GitVersion v7.1, after the managed backend ships as the v7.0 default under #5135.

Part of #5031. The release and selector lifecycle is governed by #5135, with final environment-variable cleanup in v8 tracked by #5136.

Remove the legacy backend

  • Delete src/GitVersion.LibGit2Sharp and new-cli/GitVersion.Core.Libgit2Sharp.
  • Re-point any remaining source links or consumers to the managed backend.
  • Drop LibGit2Sharp and native-binary package references.
  • Add packaging assertions proving shipped packages contain no runtimes/**/native/* entries.
  • Register the managed backend directly at production composition roots.

Remove dual-backend validation scaffolding

  • Collapse the unit-test git_backend matrix to managed-only execution.
  • Collapse Docker and artifact tests to one managed-backend path.
  • Remove backend inputs and environment forwarding from reusable workflows/actions and build utilities.
  • Delete dual-backend parity tests and libgit2-only test visibility grants.
  • Remove corpus tooling whose purpose is comparing managed and libgit2 results.
  • Keep managed-only tests that originated from parity work.

Retain the v7 selector compatibility shell

Do not remove recognition of GITVERSION_GIT_BACKEND in this issue:

  • GITVERSION_GIT_BACKEND=libgit2 fails with an actionable message that the backend was removed in v7.1.
  • GITVERSION_GIT_BACKEND=managed remains accepted as a no-op throughout v7.x so explicit v7.0 opt-in automation keeps working.
  • The selector and its compatibility diagnostics are removed in v8 by Remove feature-selector environment variables #5136.

The implementation no longer performs backend selection after this issue; only the v7 compatibility validation remains.

Documentation

  • Update the managed-Git design/status and v6-to-v7 migration documentation to show managed as the v7.0 default and LibGit2Sharp removal in v7.1.
  • Document the v7.1 error for GITVERSION_GIT_BACKEND=libgit2 and the v8 removal tracked by Remove feature-selector environment variables #5136.

Acceptance criteria

  • Shipped packages contain no LibGit2Sharp assemblies or native Git binaries.
  • Production and CI use only the managed backend.
  • No dual-backend selection or comparison infrastructure remains, apart from the v7 environment-variable compatibility validator.
  • Legacy selection fails clearly and explicit managed remains harmless in v7.x.

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.

Branch additions relevant to backend removal

  • src/GitVersion.Core/Git/GitBackend.cs now defaults to managed Git and shares trimmed/case-insensitive/blank-default validation through src/GitVersion.Core/FeatureSelector.cs, using WarningException. In v7.1, replace the libgit2 selection path with actionable removal guidance; keep explicit managed accepted until v8.
  • src/GitVersion.App/FeatureSelections.cs captures the backend before CliHost.cs registers it and GitVersionApp.cs logs the captured value. Remove the libgit2 registration/logging branch while retaining truthful managed diagnostics and stderr isolation.
  • Review new-cli/GitVersion.Common/GitVersion.Common.csproj: the new shared helper is explicitly source-linked because the Git backend selector is source-linked. Keep that dependency buildable until Remove feature-selector environment variables #5136 removes the selector/helper.
  • Update src/GitVersion.Core.Tests/Core/GitBackendSelectorTests.cs: replace libgit2 success cases with removal-error cases, retaining managed/default/empty/padded/case-insensitive and unknown-value validation.
  • In src/GitVersion.App.Tests/FeatureSelectorTests.cs, reduce CompositionRegistersSelectedImplementations to managed-only registration after this cleanup. Coordinate v6 parser/configuration cases with v7.1: remove legacy argument parser and v6 configuration runtime #5188. Adapt SelectionLogUsesCapturedValues without losing the captured-state assertion.
  • In src/GitVersion.App.Tests/ExecFeatureSelectorTests.cs, retire libgit2 runtime/migration variants in SelectorCombinationsCalculateAndLogWithoutPollutingOutput and MigrationRetainsYamlStdoutWithEitherConfigurationAndBackend; add an actionable libgit2-removal stderr case to InvalidSelectorsFailBeforeHelpWithActionableStderr. Preserve machine-readable output and default-selection tests.
  • Remove backend matrices from workflows/artifact tests only with the implementation cleanup. build/common/Utilities/DockerContextExtensions.cs now correctly documents the absent-selector default as managed.

The v7.0 branch has tests for every parser/configuration/backend combination and concrete registered implementation. Remove the obsolete alternatives rather than deleting the whole selector/output-isolation suite. Selector variables and common validation are removed only in #5136 (v8).

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

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions