static void Main(string[] args) { Console.WriteLine("NETBump Debug Tool"); var projectFile = @"C:\Development\NETBump\src\NETBump.Debug\NETBump.Debug.csproj"; var assemblyConfigurationAttribute = typeof(Program).Assembly.GetCustomAttribute <AssemblyConfigurationAttribute>(); var configuration = assemblyConfigurationAttribute?.Configuration; //configuration = "Patch"; var settings = new Settings(); var bump = new VersionBumper(projectFile, configuration, settings); // bump.ProjectPath = @"C:\Development\MSBump\_testfiles\MSBump.Test.csproj"; var result = bump.BumpVersion(); Console.WriteLine($"Bump version result: {result}"); Console.ReadKey(); }
/// <summary> /// Bump the version of changed modules or a specified module. /// </summary> private static void BumpVersions() { var changedModules = new List <string>(); foreach (var directory in _projectDirectories) { var changeLogs = Directory.GetFiles(directory, "ChangeLog.md", SearchOption.AllDirectories) .Where(f => !f.Contains("Stack") && IsChangeLogUpdated(f)) .Select(f => GetModuleManifestPath(Directory.GetParent(f).FullName)) .Where(m => m.Contains(_moduleNameFilter)) .ToList(); changedModules.AddRange(changeLogs); } foreach (var projectModuleManifestPath in changedModules) { var moduleFileName = Path.GetFileName(projectModuleManifestPath); var moduleName = moduleFileName.Replace(".psd1", ""); var outputModuleManifest = _outputDirectories .SelectMany(d => Directory.GetDirectories(d, moduleName)) .SelectMany(d => Directory.GetFiles(d, moduleFileName)) .ToList(); if (outputModuleManifest.Count == 0) { throw new FileNotFoundException("No module manifest file found in output directories"); } else if (outputModuleManifest.Count > 1) { throw new IndexOutOfRangeException("Multiple module manifest files found in output directories"); } var outputModuleManifestFile = outputModuleManifest.FirstOrDefault(); _versionBumper = new VersionBumper(new VersionFileHelper(_rootDirectory, outputModuleManifestFile, projectModuleManifestPath)); _versionBumper.BumpAllVersions(); } }
/// <summary> /// Bump the version of changed modules or a specified module. /// </summary> private static void BumpVersions() { var changedModules = new List <string>(); foreach (var directory in _projectDirectories) { var changeLogs = Directory.GetFiles(directory, "ChangeLog.md", SearchOption.AllDirectories) .Where(f => !ModuleFilter.IsAzureStackModule(f) && IsChangeLogUpdated(f)) .Select(f => GetModuleManifestPath(Directory.GetParent(f).FullName)) .Where(m => m.Contains(_moduleNameFilter)) .ToList(); changedModules.AddRange(changeLogs); } var executingAssemblyPath = Assembly.GetExecutingAssembly().Location; var versionControllerDirectory = Directory.GetParent(executingAssemblyPath).FullName; var miniVersionFile = Path.Combine(versionControllerDirectory, "MinimalVersion.csv"); if (File.Exists(miniVersionFile)) { var lines = File.ReadAllLines(miniVersionFile).Skip(1).Where(c => !string.IsNullOrEmpty(c)); foreach (var line in lines) { var cols = line.Split(",").Select(c => c.StartsWith("\"") ? c.Substring(1) : c) .Select(c => c.EndsWith("\"") ? c.Substring(0, c.Length - 1) : c) .Select(c => c.Trim()).ToArray(); if (cols.Length >= 2) { _minimalVersion.Add(cols[0], new AzurePSVersion(cols[1])); } } } foreach (var projectModuleManifestPath in changedModules) { var moduleFileName = Path.GetFileName(projectModuleManifestPath); var moduleName = moduleFileName.Replace(".psd1", ""); var outputModuleManifest = _outputDirectories .SelectMany(d => Directory.GetDirectories(d, moduleName)) .SelectMany(d => Directory.GetFiles(d, moduleFileName)) .ToList(); if (outputModuleManifest.Count == 0) { throw new FileNotFoundException("No module manifest file found in output directories"); } else if (outputModuleManifest.Count > 1) { throw new IndexOutOfRangeException("Multiple module manifest files found in output directories"); } var outputModuleManifestFile = outputModuleManifest.FirstOrDefault(); _versionBumper = new VersionBumper(new VersionFileHelper(_rootDirectory, outputModuleManifestFile, projectModuleManifestPath)); if (_minimalVersion.ContainsKey(moduleName)) { _versionBumper.MinimalVersion = _minimalVersion[moduleName]; } _versionBumper.BumpAllVersions(); } }
/// <summary> /// Bump the version of changed modules or a specified module. /// </summary> private static void BumpVersions() { string targetRepositories = null; using (PowerShell powershell = PowerShell.Create()) { powershell.AddScript("Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Scope Process;"); powershell.AddScript("Register-PackageSource -Name PSGallery -Location https://www.powershellgallery.com/api/v2 -ProviderName PowerShellGet"); powershell.AddScript("Register-PackageSource -Name TestGallery -Location https://www.poshtestgallery.com/api/v2 -ProviderName PowerShellGet"); powershell.AddScript("Get-PSRepository"); var repositories = powershell.Invoke(); string psgallery = null; string testgallery = null; foreach (var repo in repositories) { if ("https://www.powershellgallery.com/api/v2".Equals(repo.Properties["SourceLocation"]?.Value)) { psgallery = repo.Properties["Name"]?.Value?.ToString(); } if ("https://www.poshtestgallery.com/api/v2".Equals(repo.Properties["SourceLocation"]?.Value)) { testgallery = repo.Properties["Name"]?.Value?.ToString(); } } if (psgallery == null) { throw new Exception("Cannot calculate module version because PSGallery is not available."); } targetRepositories = psgallery; if (testgallery == null) { Console.WriteLine("Warning: Cannot calculate module version precisely because TestGallery is not available."); } else { targetRepositories += $",{testgallery}"; } } var changedModules = new List <string>(); foreach (var directory in _projectDirectories) { var changeLogs = Directory.GetFiles(directory, "ChangeLog.md", SearchOption.AllDirectories) .Where(f => !ModuleFilter.IsAzureStackModule(f) && IsChangeLogUpdated(f)) .Select(f => GetModuleManifestPath(Directory.GetParent(f).FullName)) .Where(m => m.Contains(_moduleNameFilter)) .ToList(); changedModules.AddRange(changeLogs); } var executingAssemblyPath = Assembly.GetExecutingAssembly().Location; var versionControllerDirectory = Directory.GetParent(executingAssemblyPath).FullName; var miniVersionFile = Path.Combine(versionControllerDirectory, "MinimalVersion.csv"); if (File.Exists(miniVersionFile)) { var lines = File.ReadAllLines(miniVersionFile).Skip(1).Where(c => !string.IsNullOrEmpty(c)); foreach (var line in lines) { var cols = line.Split(",").Select(c => c.StartsWith("\"") ? c.Substring(1) : c) .Select(c => c.EndsWith("\"") ? c.Substring(0, c.Length - 1) : c) .Select(c => c.Trim()).ToArray(); if (cols.Length >= 2) { _minimalVersion.Add(cols[0], new AzurePSVersion(cols[1])); } } } //Make Az.Accounts as the first module to calcuate changedModules = changedModules.OrderBy(c => c == "Az.Accounts" ? "" : c).ToList(); foreach (var projectModuleManifestPath in changedModules) { var moduleFileName = Path.GetFileName(projectModuleManifestPath); var moduleName = moduleFileName.Replace(".psd1", ""); var outputModuleManifest = _outputDirectories .SelectMany(d => Directory.GetDirectories(d, moduleName)) .SelectMany(d => Directory.GetFiles(d, moduleFileName)) .ToList(); if (outputModuleManifest.Count == 0) { throw new FileNotFoundException("No module manifest file found in output directories"); } else if (outputModuleManifest.Count > 1) { throw new IndexOutOfRangeException("Multiple module manifest files found in output directories"); } var outputModuleManifestFile = outputModuleManifest.FirstOrDefault(); _versionBumper = new VersionBumper(new VersionFileHelper(_rootDirectory, outputModuleManifestFile, projectModuleManifestPath)); _versionBumper.PSRepositories = targetRepositories; if (_minimalVersion.ContainsKey(moduleName)) { _versionBumper.MinimalVersion = _minimalVersion[moduleName]; } _versionBumper.BumpAllVersions(); } }