BuildParameters.cs 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Runtime.InteropServices;
  5. using System.Xml.Linq;
  6. using Nuke.Common;
  7. using Nuke.Common.CI.AzurePipelines;
  8. using Nuke.Common.IO;
  9. using static Nuke.Common.IO.PathConstruction;
  10. public partial class Build
  11. {
  12. [Parameter("configuration")]
  13. public string Configuration { get; set; }
  14. [Parameter("skip-tests")]
  15. public bool SkipTests { get; set; }
  16. [Parameter("force-nuget-version")]
  17. public string ForceNugetVersion { get; set; }
  18. [Parameter("skip-previewer")]
  19. public bool SkipPreviewer { get; set; }
  20. public class BuildParameters
  21. {
  22. public string Configuration { get; }
  23. public bool SkipTests { get; }
  24. public bool SkipPreviewer {get;}
  25. public string MainRepo { get; }
  26. public string MasterBranch { get; }
  27. public string RepositoryName { get; }
  28. public string RepositoryBranch { get; }
  29. public string ReleaseConfiguration { get; }
  30. public string ReleaseBranchPrefix { get; }
  31. public string MSBuildSolution { get; }
  32. public bool IsLocalBuild { get; }
  33. public bool IsRunningOnUnix { get; }
  34. public bool IsRunningOnWindows { get; }
  35. public bool IsRunningOnAzure { get; }
  36. public bool IsPullRequest { get; }
  37. public bool IsMainRepo { get; }
  38. public bool IsMasterBranch { get; }
  39. public bool IsReleaseBranch { get; }
  40. public bool IsReleasable { get; }
  41. public bool IsMyGetRelease { get; }
  42. public bool IsNuGetRelease { get; }
  43. public bool PublishTestResults { get; }
  44. public string Version { get; }
  45. public AbsolutePath ArtifactsDir { get; }
  46. public AbsolutePath NugetIntermediateRoot { get; }
  47. public AbsolutePath NugetRoot { get; }
  48. public AbsolutePath ZipRoot { get; }
  49. public AbsolutePath BinRoot { get; }
  50. public AbsolutePath TestResultsRoot { get; }
  51. public string DirSuffix { get; }
  52. public List<string> BuildDirs { get; }
  53. public string FileZipSuffix { get; }
  54. public AbsolutePath ZipCoreArtifacts { get; }
  55. public AbsolutePath ZipNuGetArtifacts { get; }
  56. public AbsolutePath ZipSourceControlCatalogDesktopDir { get; }
  57. public AbsolutePath ZipTargetControlCatalogDesktopDir { get; }
  58. public BuildParameters(Build b)
  59. {
  60. // ARGUMENTS
  61. Configuration = b.Configuration ?? "Release";
  62. SkipTests = b.SkipTests;
  63. SkipPreviewer = b.SkipPreviewer;
  64. // CONFIGURATION
  65. MainRepo = "https://github.com/AvaloniaUI/Avalonia";
  66. MasterBranch = "refs/heads/master";
  67. ReleaseBranchPrefix = "refs/heads/release/";
  68. ReleaseConfiguration = "Release";
  69. MSBuildSolution = RootDirectory / "dirs.proj";
  70. // PARAMETERS
  71. IsLocalBuild = Host == HostType.Console;
  72. IsRunningOnUnix = Environment.OSVersion.Platform == PlatformID.Unix ||
  73. Environment.OSVersion.Platform == PlatformID.MacOSX;
  74. IsRunningOnWindows = RuntimeInformation.IsOSPlatform(OSPlatform.Windows);
  75. IsRunningOnAzure = Host == HostType.AzurePipelines ||
  76. Environment.GetEnvironmentVariable("LOGNAME") == "vsts";
  77. if (IsRunningOnAzure)
  78. {
  79. RepositoryName = AzurePipelines.Instance.RepositoryUri;
  80. RepositoryBranch = AzurePipelines.Instance.SourceBranch;
  81. IsPullRequest = AzurePipelines.Instance.PullRequestId.HasValue;
  82. IsMainRepo = StringComparer.OrdinalIgnoreCase.Equals(MainRepo, AzurePipelines.Instance.RepositoryUri);
  83. }
  84. IsMainRepo =
  85. StringComparer.OrdinalIgnoreCase.Equals(MainRepo,
  86. RepositoryName);
  87. IsMasterBranch = StringComparer.OrdinalIgnoreCase.Equals(MasterBranch,
  88. RepositoryBranch);
  89. IsReleaseBranch = RepositoryBranch?.StartsWith(ReleaseBranchPrefix, StringComparison.OrdinalIgnoreCase) ==
  90. true;
  91. IsReleasable = StringComparer.OrdinalIgnoreCase.Equals(ReleaseConfiguration, Configuration);
  92. IsMyGetRelease = IsReleasable;
  93. IsNuGetRelease = IsMainRepo && IsReleasable && IsReleaseBranch;
  94. // VERSION
  95. Version = b.ForceNugetVersion ?? GetVersion();
  96. if (IsRunningOnAzure)
  97. {
  98. if (!IsNuGetRelease)
  99. {
  100. // Use AssemblyVersion with Build as version
  101. Version += "-cibuild" + int.Parse(Environment.GetEnvironmentVariable("BUILD_BUILDID")).ToString("0000000") + "-beta";
  102. }
  103. PublishTestResults = true;
  104. }
  105. // DIRECTORIES
  106. ArtifactsDir = RootDirectory / "artifacts";
  107. NugetRoot = ArtifactsDir / "nuget";
  108. NugetIntermediateRoot = RootDirectory / "build-intermediate" / "nuget";
  109. ZipRoot = ArtifactsDir / "zip";
  110. BinRoot = ArtifactsDir / "bin";
  111. TestResultsRoot = ArtifactsDir / "test-results";
  112. BuildDirs = GlobDirectories(RootDirectory, "**bin").Concat(GlobDirectories(RootDirectory, "**obj")).ToList();
  113. DirSuffix = Configuration;
  114. FileZipSuffix = Version + ".zip";
  115. ZipCoreArtifacts = ZipRoot / ("Avalonia-" + FileZipSuffix);
  116. ZipNuGetArtifacts = ZipRoot / ("Avalonia-NuGet-" + FileZipSuffix);
  117. ZipSourceControlCatalogDesktopDir =
  118. RootDirectory / ("samples/ControlCatalog.Desktop/bin/" + DirSuffix + "/net461");
  119. ZipTargetControlCatalogDesktopDir = ZipRoot / ("ControlCatalog.Desktop-" + FileZipSuffix);
  120. }
  121. string GetVersion()
  122. {
  123. var xdoc = XDocument.Load(RootDirectory / "build/SharedVersion.props");
  124. return xdoc.Descendants().First(x => x.Name.LocalName == "Version").Value;
  125. }
  126. }
  127. }