You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

81 lines
3.1 KiB

  1. using System.Collections.Generic;
  2. using FlubuCore.Context;
  3. using FlubuCore.Context.Attributes.BuildProperties;
  4. using FlubuCore.IO;
  5. using FlubuCore.Scripting;
  6. using FlubuCore.Scripting.Attributes;
  7. namespace BuildScript
  8. {
  9. [Include("./build/BuildVersion.cs")]
  10. public partial class BuildScript : DefaultBuildScript
  11. {
  12. [FromArg("c|configuration")]
  13. [BuildConfiguration]
  14. public string Configuration { get; set; } = "Release";
  15. [SolutionFileName] public string SolutionFileName { get; set; } = "CAP.sln";
  16. protected BuildVersion BuildVersion { get; set; }
  17. protected string ArtifactsDir => RootDirectory.CombineWith("artifacts");
  18. protected List<FileFullPath> ProjectFiles { get; set; }
  19. protected List<FileFullPath> TestProjectFiles { get; set; }
  20. protected override void BeforeBuildExecution(ITaskContext context)
  21. {
  22. BuildVersion = FetchBuildVersion(context);
  23. TestProjectFiles = context.GetFiles(RootDirectory.CombineWith("test"), "*/*.csproj");
  24. ProjectFiles = context.GetFiles(RootDirectory.CombineWith("src"), "*/*.csproj");
  25. }
  26. protected override void ConfigureTargets(ITaskContext context)
  27. {
  28. var clean = context.CreateTarget("Clean")
  29. .SetDescription("Cleans the output of all projects in the solution.")
  30. .AddCoreTask(x => x.Clean()
  31. .AddDirectoryToClean(ArtifactsDir, true));
  32. var restore = context.CreateTarget("Restore")
  33. .SetDescription("Restores the dependencies and tools of all projects in the solution.")
  34. .DependsOn(clean)
  35. .AddCoreTask(x => x.Restore());
  36. var build = context.CreateTarget("Build")
  37. .SetDescription("Builds all projects in the solution.")
  38. .DependsOn(restore)
  39. .AddCoreTask(x => x.Build()
  40. .InformationalVersion(BuildVersion.VersionWithSuffix()));
  41. var tests = context.CreateTarget("Tests")
  42. .SetDescription("Runs all Cap tests.")
  43. .ForEach(TestProjectFiles,
  44. (projectFile, target) =>
  45. {
  46. target.AddCoreTask(x => x.Test()
  47. .Project(projectFile)
  48. .NoBuild());
  49. });
  50. var pack = context.CreateTarget("Pack")
  51. .SetDescription("Creates nuget packages for Cap.")
  52. .ForEach(ProjectFiles, (projectFile, target) =>
  53. {
  54. target.AddCoreTask(x => x.Pack()
  55. .NoBuild()
  56. .Project(projectFile)
  57. .IncludeSymbols()
  58. .VersionSuffix(BuildVersion.Suffix)
  59. .OutputDirectory(ArtifactsDir));
  60. });
  61. context.CreateTarget("Default")
  62. .SetDescription("Runs all targets.")
  63. .SetAsDefault()
  64. .DependsOn(clean, restore, build, tests, pack);
  65. }
  66. }
  67. }