Fix SWAM hash (#20240)

This commit is contained in:
Steve Sanderson 2020-03-28 17:53:46 +00:00 committed by GitHub
parent 18a196bcef
commit c379bae8e9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 14 additions and 5 deletions

View File

@ -23,7 +23,7 @@
Inputs="@(ServiceWorkerAssetsManifestItem)" Inputs="@(ServiceWorkerAssetsManifestItem)"
Outputs="$(_ServiceWorkerAssetsManifestIntermediateOutputPath)" Outputs="$(_ServiceWorkerAssetsManifestIntermediateOutputPath)"
BeforeTargets="_BlazorStaticWebAssetsCopyGeneratedFilesToOutputDirectory" BeforeTargets="_BlazorStaticWebAssetsCopyGeneratedFilesToOutputDirectory"
DependsOnTargets="_ComputeServiceWorkerAssetsManifestFileHashes; _ComputeDefaultServiceWorkerAssetsManifestVersion"> DependsOnTargets="_ComputeServiceWorkerAssetsManifestFileHashes; _ComputeDefaultServiceWorkerAssetsManifestVersion; _GenerateServiceWorkerIntermediateFiles">
<GenerateServiceWorkerAssetsManifest <GenerateServiceWorkerAssetsManifest
Version="$(ServiceWorkerAssetsManifestVersion)" Version="$(ServiceWorkerAssetsManifestVersion)"
@ -61,11 +61,19 @@
Compute a default ServiceWorkerAssetsManifestVersion value by combining all the asset hashes. Compute a default ServiceWorkerAssetsManifestVersion value by combining all the asset hashes.
This is useful because then clients will only have to repopulate caches if the contents have changed. This is useful because then clients will only have to repopulate caches if the contents have changed.
--> -->
<Target Name="_ComputeDefaultServiceWorkerAssetsManifestVersion" Condition="'$(ServiceWorkerAssetsManifest)' != ''"> <Target Name="_ComputeDefaultServiceWorkerAssetsManifestVersion"
DependsOnTargets="_ComputeServiceWorkerAssetsManifestFileHashes"
Condition="'$(ServiceWorkerAssetsManifest)' != ''">
<PropertyGroup> <PropertyGroup>
<_CombinedHashIntermediatePath>$(_BlazorIntermediateOutputPath)serviceworkerhashes.txt</_CombinedHashIntermediatePath> <_CombinedHashIntermediatePath>$(_BlazorIntermediateOutputPath)serviceworkerhashes.txt</_CombinedHashIntermediatePath>
</PropertyGroup> </PropertyGroup>
<!-- Neither of these should ever happen, but if we do we want to know about it. -->
<Error Text="Cannot compute service worker assets manifest version, because no service worker manifest items were defined."
Condition="'@(_ServiceWorkerAssetsManifestItemWithHash)' == ''" />
<Error Text="While computing service worker assets manifest version, did not find any dll entries in service worker assets manifest."
Condition="'@(_ServiceWorkerAssetsManifestItemWithHash->WithMetadataValue('Extension', '.dll'))' == ''" />
<WriteLinesToFile <WriteLinesToFile
File="$(_CombinedHashIntermediatePath)" File="$(_CombinedHashIntermediatePath)"
Lines="@(_ServiceWorkerAssetsManifestItemWithHash->'%(FileHash)')" Lines="@(_ServiceWorkerAssetsManifestItemWithHash->'%(FileHash)')"
@ -91,7 +99,7 @@
<Target Name="_ResolveServiceWorkerOutputs" <Target Name="_ResolveServiceWorkerOutputs"
BeforeTargets="_ResolveBlazorOutputs" BeforeTargets="_ResolveBlazorOutputs"
DependsOnTargets="_ComputeServiceWorkerOutputs; _GenerateServiceWorkerIntermediateFiles"> DependsOnTargets="_ComputeServiceWorkerOutputs">
<ItemGroup> <ItemGroup>
<_BlazorOutputWithTargetPath Include="@(_ServiceWorkerIntermediateFile)" /> <_BlazorOutputWithTargetPath Include="@(_ServiceWorkerIntermediateFile)" />
</ItemGroup> </ItemGroup>

View File

@ -191,10 +191,11 @@ namespace Templates.Test
var serviceWorkerContents = ReadFile(publishDir, "service-worker.js"); var serviceWorkerContents = ReadFile(publishDir, "service-worker.js");
// Parse the "version": "..." value from the SWAM, and check it's in the service worker // Parse the "version": "..." value from the SWAM, and check it's in the service worker
var serviceWorkerAssetsManifestVersionMatch = new Regex(@"^\s*\""version\"":\s*\""([^\""]+)\""", RegexOptions.Multiline) var serviceWorkerAssetsManifestVersionMatch = new Regex(@"^\s*\""version\"":\s*(\""[^\""]+\"")", RegexOptions.Multiline)
.Match(serviceWorkerAssetsManifestContents); .Match(serviceWorkerAssetsManifestContents);
Assert.True(serviceWorkerAssetsManifestVersionMatch.Success); Assert.True(serviceWorkerAssetsManifestVersionMatch.Success);
var serviceWorkerAssetsManifestVersion = serviceWorkerAssetsManifestVersionMatch.Groups[1].Captures[0]; var serviceWorkerAssetsManifestVersionJson = serviceWorkerAssetsManifestVersionMatch.Groups[1].Captures[0].Value;
var serviceWorkerAssetsManifestVersion = JsonSerializer.Deserialize<string>(serviceWorkerAssetsManifestVersionJson);
Assert.True(serviceWorkerContents.Contains($"/* Manifest version: {serviceWorkerAssetsManifestVersion} */", StringComparison.Ordinal)); Assert.True(serviceWorkerContents.Contains($"/* Manifest version: {serviceWorkerAssetsManifestVersion} */", StringComparison.Ordinal));
} }