using System.Runtime.Versioning; using StabilityMatrix.Core.Models.Progress; using StabilityMatrix.Core.Processes; namespace StabilityMatrix.Core.Helper; public interface IPrerequisiteHelper { string GitBinPath { get; } bool IsPythonInstalled { get; } Task InstallAllIfNecessary(IProgress? progress = null); Task UnpackResourcesIfNecessary(IProgress? progress = null); Task InstallGitIfNecessary(IProgress? progress = null); Task InstallPythonIfNecessary(IProgress? progress = null); [SupportedOSPlatform("Windows")] Task InstallVcRedistIfNecessary(IProgress? progress = null); /// /// Run embedded git with the given arguments. /// Task RunGit(ProcessArgs args, Action? onProcessOutput, string? workingDirectory = null); /// /// Run embedded git with the given arguments. /// Task RunGit(ProcessArgs args, string? workingDirectory = null); Task GetGitOutput(ProcessArgs args, string? workingDirectory = null); async Task CheckIsGitRepository(string directory) { var result = await GetGitOutput(["rev-parse", "--is-inside-work-tree"], directory) .ConfigureAwait(false); return result.ExitCode == 0 && result.StandardOutput?.Trim().ToLowerInvariant() == "true"; } Task InstallTkinterIfNecessary(IProgress? progress = null); }