From e2b12060f38dc39972bf018fe3ea1f428a449422 Mon Sep 17 00:00:00 2001 From: Javier Calvarro Nelson Date: Thu, 26 Sep 2024 13:05:36 +0200 Subject: [PATCH] [StaticWebAssets] Avoid reading manifest for hash --- .../Targets/Microsoft.NET.Sdk.StaticWebAssets.targets | 5 ++++- .../Tasks/GenerateStaticWebAssetsManifest.cs | 10 +++++++++- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/StaticWebAssetsSdk/Targets/Microsoft.NET.Sdk.StaticWebAssets.targets b/src/StaticWebAssetsSdk/Targets/Microsoft.NET.Sdk.StaticWebAssets.targets index 436cdac4cb77..717c203aa732 100644 --- a/src/StaticWebAssetsSdk/Targets/Microsoft.NET.Sdk.StaticWebAssets.targets +++ b/src/StaticWebAssetsSdk/Targets/Microsoft.NET.Sdk.StaticWebAssets.targets @@ -437,6 +437,7 @@ Copyright (c) .NET Foundation. All rights reserved. <_StaticWebAssetsManifestBase Condition="'$(_StaticWebAssetsManifestBase)' == ''">$(IntermediateOutputPath) $(_StaticWebAssetsManifestBase)staticwebassets.build.json + $(StaticWebAssetBuildManifestPath).cache $(_StaticWebAssetsManifestBase)staticwebassets.pack.json $(_StaticWebAssetsManifestBase)staticwebassets.development.json $(_StaticWebAssetsManifestBase)staticwebassets.build.endpoints.json @@ -620,7 +621,8 @@ Copyright (c) .NET Foundation. All rights reserved. DiscoveryPatterns="@(StaticWebAssetDiscoveryPattern)" Assets="@(StaticWebAsset)" Endpoints="@(StaticWebAssetEndpoint)" - ManifestPath="$(StaticWebAssetBuildManifestPath)"> + ManifestPath="$(StaticWebAssetBuildManifestPath)" + ManifestCacheFilePath="$(StaticWebAssetsBuildManifestCacheFilePath)"> + diff --git a/src/StaticWebAssetsSdk/Tasks/GenerateStaticWebAssetsManifest.cs b/src/StaticWebAssetsSdk/Tasks/GenerateStaticWebAssetsManifest.cs index c7117defc054..a4b9efd39e8f 100644 --- a/src/StaticWebAssetsSdk/Tasks/GenerateStaticWebAssetsManifest.cs +++ b/src/StaticWebAssetsSdk/Tasks/GenerateStaticWebAssetsManifest.cs @@ -36,6 +36,9 @@ public class GenerateStaticWebAssetsManifest : Task [Required] public string ManifestPath { get; set; } + [Required] + public string ManifestCacheFilePath { get; set; } + public override bool Execute() { try @@ -117,18 +120,23 @@ private IEnumerable FilterPublishEndpointsIfNeeded(IEnum private void PersistManifest(StaticWebAssetsManifest manifest) { var data = JsonSerializer.SerializeToUtf8Bytes(manifest, StaticWebAssetsJsonSerializerContext.RelaxedEscaping.StaticWebAssetsManifest); + var cacheFileExists = File.Exists(ManifestCacheFilePath); var fileExists = File.Exists(ManifestPath); - var existingManifestHash = fileExists ? StaticWebAssetsManifest.FromJsonBytes(File.ReadAllBytes(ManifestPath)).Hash : ""; + var existingManifestHash = cacheFileExists ? + File.ReadAllText(ManifestCacheFilePath) : + fileExists ? StaticWebAssetsManifest.FromJsonBytes(File.ReadAllBytes(ManifestPath)).Hash : ""; if (!fileExists) { Log.LogMessage(MessageImportance.Low, $"Creating manifest because manifest file '{ManifestPath}' does not exist."); File.WriteAllBytes(ManifestPath, data); + File.WriteAllText(ManifestCacheFilePath, manifest.Hash); } else if (!string.Equals(manifest.Hash, existingManifestHash, StringComparison.Ordinal)) { Log.LogMessage(MessageImportance.Low, $"Updating manifest because manifest version '{manifest.Hash}' is different from existing manifest hash '{existingManifestHash}'."); File.WriteAllBytes(ManifestPath, data); + File.WriteAllText(ManifestCacheFilePath, manifest.Hash); } else {