Build/PowershellBuilder.cs
using System.Reflection;
using MoreLinq; namespace Build; public class PowershellBuilder { public async Task Invoke() { // system management automation encounters error with snapin loading var dirPath = GetProjectRoot(); var filePath = dirPath + "/PowerShellUtils.psd1"; Console.WriteLine($"Reading file: {filePath}"); var content = await File.ReadAllLinesAsync(filePath); var line = content.Index().First(x => x.Value.StartsWith("ModuleVersion")); var versionStr = line.Value.Split("'")[1]; var version = Version.Parse(versionStr); Console.WriteLine($"Current version: {version}"); version.IncrementPatch(); Console.WriteLine($"Updated to new version: {version}"); var contentToWrite = content.Select((x, i) => i == line.Key ? $"ModuleVersion = '{version}'" : x); await File.WriteAllLinesAsync(filePath, contentToWrite); } public DirectoryInfo GetProjectRoot() { var currentDirectory = new DirectoryInfo(Assembly.GetExecutingAssembly().Location); while (currentDirectory.Name is not "PowerShellStandardModule1") { currentDirectory = currentDirectory.Parent!; } return currentDirectory; } } public record Version { public int Major { get; set; } public int Minor { get; set; } public int Patch { get; set; } public static Version Parse(string version) { var parts = version.Split("."); var intParts = parts.Select(int.Parse).ToList(); return new Version { Major = intParts[0], Minor = intParts[1], Patch = intParts[2] }; } public Version IncrementMajor() { Major++; Minor = 0; Patch = 0; return this; } public Version IncrementMinor() { Minor++; Patch = 0; return this; } public Version IncrementPatch() { Patch++; return this; } public override string ToString() { return $"{Major}.{Minor}.{Patch}"; } } |