Backend/ReSharperPlugin/build/_build/ForTeaBuild.cs (97 lines of code) (raw):

using System; using System.Globalization; using System.IO; using System.Linq; using JetBrains.Annotations; using Nuke.Common; using Nuke.Common.IO; using Nuke.Common.ProjectModel; using Nuke.Common.Tools.DotNet; using Nuke.Common.Tools.NuGet; using Nuke.Common.Utilities; using static Nuke.Common.Tools.NuGet.NuGetTasks; internal class ForTeaBuild : NukeBuild { [Parameter] public string Configuration; [Parameter] public string WaveVersion; [Parameter] public string PluginVersion; [Parameter] public readonly string NuGetSource = "https://plugins.jetbrains.com/"; [Parameter] public readonly string NuGetApiKey; [Solution] private readonly Solution Solution; private const string MainProjectName = "ForTea.ReSharperPlugin"; private AbsolutePath OutputDirectory => RootDirectory / "artifacts" / Configuration; [NotNull] public Target InitializeConfiguration => target => target.Executes(() => { if (Configuration != null) { Console.WriteLine($"Building for given configuration: {Configuration}"); return; } // Configuration can be provided like this: // .\build.ps1 --configuration Release Console.WriteLine("Please, select configuration:"); Console.WriteLine(" 1: Release"); Console.WriteLine(" 2: Debug"); Console.Write("Enter selection (default: Release) [1..2]:"); string line = Console.ReadLine(); if (string.IsNullOrEmpty(line)) { Configuration = "Release"; return; } int number = int.Parse(line); Configuration = number switch { 1 => "Release", 2 => "Debug", _ => throw new ArgumentOutOfRangeException() }; }); [NotNull] public Target InitializeWave => target => target.Executes(() => { if (WaveVersion != null) { Console.WriteLine($"Building for given wave version: {WaveVersion}"); return; } // Wave version can be provided like this: // .\build.ps1 --waveVersion 202.0 Console.WriteLine("Please, enter wave version: "); WaveVersion = Console.ReadLine(); }); [NotNull] public Target Compile => target => target .DependsOn(InitializeConfiguration) .Executes(() => DotNetTasks.DotNetBuild(settings => settings .SetConfiguration(Configuration) .SetProjectFile(Solution))); [NotNull] public Target Pack => target => target .DependsOn(Compile, InitializeWave) .Executes(() => NuGetPack(settings => settings .SetTargetPath(RootDirectory / "ForTea.nuspec") .SetOutputDirectory(OutputDirectory) .SetProperty("jetBrainsYearSpan", GetJetBrainsYearSpan()) .SetProperty("releaseNotes", GetLatestReleaseNotes()) .SetProperty("configuration", Configuration) .SetProperty("wave", WaveVersion) .SetProperty("pluginVersion", PluginVersion) .EnableNoPackageAnalysis())); [NotNull] private string GetJetBrainsYearSpan() { const int startYear = 2019; int currentYear = DateTime.Now.Year; string startYearString = startYear.ToString(CultureInfo.InvariantCulture); if (currentYear == startYear) return startYearString; string currentYearString = currentYear.ToString(CultureInfo.InvariantCulture); return $"{startYearString}-{currentYearString}"; } [NotNull] private static string GetLatestReleaseNotes() => File .ReadAllLines(RootDirectory.Parent.Parent / "CHANGELOG.md") .SkipWhile(x => !x.StartsWith("##", StringComparison.Ordinal)) .Skip(1) .TakeWhile(x => !string.IsNullOrWhiteSpace(x)) .Select(x => $"\u2022{x.TrimStart('-')}") .JoinNewLine(); public static int Main() => Execute<ForTeaBuild>(x => x.Compile); }