ClientPackaging.cs 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. using System.Diagnostics;
  2. using System.IO.Compression;
  3. using Robust.Packaging;
  4. using Robust.Packaging.AssetProcessing;
  5. using Robust.Packaging.AssetProcessing.Passes;
  6. using Robust.Packaging.Utility;
  7. using Robust.Shared.Timing;
  8. namespace Content.Packaging;
  9. public static class ClientPackaging
  10. {
  11. /// <summary>
  12. /// Be advised this can be called from server packaging during a HybridACZ build.
  13. /// </summary>
  14. public static async Task PackageClient(bool skipBuild, string configuration, IPackageLogger logger)
  15. {
  16. logger.Info("Building client...");
  17. if (!skipBuild)
  18. {
  19. await ProcessHelpers.RunCheck(new ProcessStartInfo
  20. {
  21. FileName = "dotnet",
  22. ArgumentList =
  23. {
  24. "build",
  25. Path.Combine("Content.Client", "Content.Client.csproj"),
  26. "-c", configuration,
  27. "--nologo",
  28. "/v:m",
  29. "/t:Rebuild",
  30. "/p:FullRelease=true",
  31. "/m"
  32. }
  33. });
  34. }
  35. logger.Info("Packaging client...");
  36. var sw = RStopwatch.StartNew();
  37. {
  38. await using var zipFile =
  39. File.Open(Path.Combine("release", "SS14.Client.zip"), FileMode.Create, FileAccess.ReadWrite);
  40. using var zip = new ZipArchive(zipFile, ZipArchiveMode.Update);
  41. var writer = new AssetPassZipWriter(zip);
  42. await WriteResources("", writer, logger, default);
  43. await writer.FinishedTask;
  44. }
  45. logger.Info($"Finished packaging client in {sw.Elapsed}");
  46. }
  47. public static async Task WriteResources(
  48. string contentDir,
  49. AssetPass pass,
  50. IPackageLogger logger,
  51. CancellationToken cancel)
  52. {
  53. var graph = new RobustClientAssetGraph();
  54. pass.Dependencies.Add(new AssetPassDependency(graph.Output.Name));
  55. var dropSvgPass = new AssetPassFilterDrop(f => f.Path.EndsWith(".svg"))
  56. {
  57. Name = "DropSvgPass",
  58. };
  59. dropSvgPass.AddDependency(graph.Input).AddBefore(graph.PresetPasses);
  60. AssetGraph.CalculateGraph([pass, dropSvgPass, ..graph.AllPasses], logger);
  61. var inputPass = graph.Input;
  62. await RobustSharedPackaging.WriteContentAssemblies(
  63. inputPass,
  64. contentDir,
  65. "Content.Client",
  66. new[] { "Content.Client", "Content.Shared", "Content.Shared.Database" },
  67. cancel: cancel);
  68. await RobustClientPackaging.WriteClientResources(contentDir, inputPass, cancel);
  69. inputPass.InjectFinished();
  70. }
  71. }