Skip to content

[Static Web Assets] Fingerprint and Hash for SWA. #39405

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 10 commits into from
Mar 19, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -68,10 +68,10 @@ Copyright (c) .NET Foundation. All rights reserved.

<!-- Wire-up static web assets -->
<PropertyGroup>
<ResolveStaticWebAssetsInputsDependsOn>
$(ResolveStaticWebAssetsInputsDependsOn);
<ResolveBuildRelatedStaticWebAssetsDependsOn>
$(ResolveBuildRelatedStaticWebAssetsDependsOn);
_ResolveBlazorWasmOutputs;
</ResolveStaticWebAssetsInputsDependsOn>
</ResolveBuildRelatedStaticWebAssetsDependsOn>

<GenerateBuildWasmBootJsonDependsOn>
$(GenerateBuildWasmBootJsonDependsOn);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,7 @@
<ItemGroup>
<Compile Include="**\*.cs" />
<Compile LinkBase="StaticWebAssets" Include="..\..\StaticWebAssetsSdk\Tasks\Data\**\StaticwebAsset.cs" />
<Compile LinkBase="StaticWebAssets" Include="..\..\StaticWebAssetsSdk\Tasks\Utils\FileHasher.cs" />
</ItemGroup>

<Target Name="PrepareAdditionalFilesToLayout" BeforeTargets="AssignTargetPaths">
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,11 @@ Copyright (c) .NET Foundation. All rights reserved.
AssemblyFile="$(StaticWebAssetsSdkBuildTasksAssembly)"
Condition="'$(StaticWebAssetsSdkBuildTasksAssembly)' != ''" />

<UsingTask
TaskName="Microsoft.AspNetCore.StaticWebAssets.Tasks.UpgradeLegacyStaticWebAssetsToV2"
AssemblyFile="$(StaticWebAssetsSdkBuildTasksAssembly)"
Condition="'$(StaticWebAssetsSdkBuildTasksAssembly)' != ''" />

<UsingTask
TaskName="Microsoft.AspNetCore.StaticWebAssets.Tasks.ValidateStaticWebAssetsUniquePaths"
AssemblyFile="$(StaticWebAssetsSdkBuildTasksAssembly)"
Expand Down Expand Up @@ -395,22 +400,24 @@ Copyright (c) .NET Foundation. All rights reserved.
<_StaticWebAssetUpgradeMetadataToKeep Include="RelatedAsset" />
<_StaticWebAssetUpgradeMetadataToKeep Include="AssetTraitName" />
<_StaticWebAssetUpgradeMetadataToKeep Include="AssetTraitValue" />
<_StaticWebAssetUpgradeMetadataToKeep Include="Fingerprint" />
<_StaticWebAssetUpgradeMetadataToKeep Include="Integrity" />
<_StaticWebAssetUpgradeMetadataToKeep Include="CopyToOutputDirectory" />
<_StaticWebAssetUpgradeMetadataToKeep Include="CopyToPublishDirectory" />
<_StaticWebAssetUpgradeMetadataToKeep Include="OriginalItemSpec" />
</ItemGroup>

<UpgradeLegacyStaticWebAssetsToV2
Assets="@(_ThisProjectStaticWebAssets)"
Condition="'@(_ThisProjectStaticWebAssets)' != ''"
>
<Output TaskParameter="UpgradedAssets" ItemName="_ThisProjectStaticWebAssetsUpgraded" />
</UpgradeLegacyStaticWebAssetsToV2>

<_ThisProjectStaticWebAssetItems KeepMetadata="@(_StaticWebAssetUpgradeMetadataToKeep)" Include="@(_ThisProjectStaticWebAssets->'%(FullPath)')">
<ItemGroup>
<_ThisProjectStaticWebAssetItems KeepMetadata="@(_StaticWebAssetUpgradeMetadataToKeep)" Include="@(_ThisProjectStaticWebAssetsUpgraded)">
<ResultType>StaticWebAsset</ResultType>
<SourceType>Project</SourceType>
<AssetKind Condition="'%(_ThisProjectStaticWebAssets.AssetKind)' == ''">All</AssetKind>
<AssetMode Condition="'%(_ThisProjectStaticWebAssets.AssetMode)' == ''">All</AssetMode>
<AssetRole Condition="'%(_ThisProjectStaticWebAssets.AssetRole)' == ''">Primary</AssetRole>
<RelatedAsset Condition="'%(_ThisProjectStaticWebAssets.RelatedAsset)' == ''"></RelatedAsset>
<AssetTraitName Condition="'%(_ThisProjectStaticWebAssets.AssetTraitName)' == ''"></AssetTraitName>
<AssetTraitValue Condition="'%(_ThisProjectStaticWebAssets.AssetTraitValue)' == ''"></AssetTraitValue>
<CopyToOutputDirectory Condition="'%(_ThisProjectStaticWebAssets.CopyToOutputDirectory)' == ''">Never</CopyToOutputDirectory>
<CopyToPublishDirectory Condition="'%(_ThisProjectStaticWebAssets.CopyToPublishDirectory)' == ''">PreserveNewest</CopyToPublishDirectory>
<OriginalItemSpec Condition="'%(_ThisProjectStaticWebAssets.OriginalItemSpec)' == ''">%(_ThisProjectStaticWebAssets.Identity)</OriginalItemSpec>
</_ThisProjectStaticWebAssetItems>
<_ThisProjectStaticWebAssetItems Include="$(PackageId)\wwwroot" Condition="Exists('$(MSBuildProjectDirectory)\wwwroot')">
<ResultType>StaticWebAssetDiscoveryPattern</ResultType>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -167,33 +167,44 @@ Copyright (c) .NET Foundation. All rights reserved.
</PropertyGroup>

<PropertyGroup>
<ResolveCompressedFilesDependsOn>ResolveNonComputedAssets;$(ResolveCompressedFilesDependsOn)</ResolveCompressedFilesDependsOn>
<ResolveCompressedFilesForPublishDependsOn>$(ResolveCompressedFilesForPublishDependsOn)</ResolveCompressedFilesForPublishDependsOn>
<CompressFilesDependsOn>$(CompressFilesDependsOn)</CompressFilesDependsOn>
<CompressFilesForPublishDependsOn>$(CompressFilesForPublishDependsOn)</CompressFilesForPublishDependsOn>
</PropertyGroup>

<PropertyGroup>
<GenerateComputedBuildStaticWebAssetsDependsOn>
$(GenerateComputedBuildStaticWebAssetsDependsOn);
_CompressFiles;
</GenerateComputedBuildStaticWebAssetsDependsOn>
<GenerateComputedPublishStaticWebAssetsDependsOn>
$(GenerateComputedPublishStaticWebAssetsDependsOn);
_CompressFilesForPublish;
</GenerateComputedPublishStaticWebAssetsDependsOn>
<StaticWebAssetsPrepareForPublishDependsOn>
$(StaticWebAssetsPrepareForPublishDependsOn);
_CompressFilesForPublish;
</StaticWebAssetsPrepareForPublishDependsOn>
<ResolveStaticWebAssetsInputsDependsOn>
$(ResolveStaticWebAssetsInputsDependsOn);
_ResolveCompressedFiles;
</ResolveStaticWebAssetsInputsDependsOn>
<ResolvePublishStaticWebAssetsDependsOn>
$(ResolvePublishStaticWebAssetsDependsOn);
_ResolveCompressedFilesForPublish;
</ResolvePublishStaticWebAssetsDependsOn>
<!--
ResolveBuildRelatedStaticWebAssets
ResolveBuildCompressedStaticWebAssets
GenerateBuildCompressedStaticWebAssets
ResolveBuildCompressedStaticWebAssetsConfiguration
-->
<ResolveBuildRelatedStaticWebAssetsDependsOn Condition="'$(DisableBuildCompression)' != 'true'">
ResolveBuildCompressedStaticWebAssets;
$(ResolveBuildRelatedStaticWebAssetsDependsOn)
</ResolveBuildRelatedStaticWebAssetsDependsOn>
<ResolveBuildCompressedStaticWebAssetsDependsOn>
GenerateBuildCompressedStaticWebAssets;
$(ResolveBuildCompressedStaticWebAssetsDependsOn)
</ResolveBuildCompressedStaticWebAssetsDependsOn>
<GenerateBuildCompressedStaticWebAssetsDependsOn>
ResolveBuildCompressedStaticWebAssetsConfiguration;
$(GenerateBuildCompressedStaticWebAssetsDependsOn)
</GenerateBuildCompressedStaticWebAssetsDependsOn>

<!--
ResolvePublishRelatedStaticWebAssets
ResolvePublishCompressedStaticWebAssets
GeneratePublishCompressedStaticWebAssets
ResolvePublishCompressedStaticWebAssetsConfiguration
-->
<ResolvePublishRelatedStaticWebAssetsDependsOn Condition="'$(DisableBuildCompression)' != 'true'">
ResolvePublishCompressedStaticWebAssets;
$(ResolvePublishRelatedStaticWebAssetsDependsOn)
</ResolvePublishRelatedStaticWebAssetsDependsOn>
<ResolvePublishCompressedStaticWebAssetsDependsOn>
GeneratePublishCompressedStaticWebAssets;
$(ResolvePublishCompressedStaticWebAssetsDependsOn)
</ResolvePublishCompressedStaticWebAssetsDependsOn>
<GeneratePublishCompressedStaticWebAssetsDependsOn>
ResolvePublishCompressedStaticWebAssetsConfiguration;
$(GeneratePublishCompressedStaticWebAssetsDependsOn)
</GeneratePublishCompressedStaticWebAssetsDependsOn>

</PropertyGroup>

Expand All @@ -203,93 +214,72 @@ Copyright (c) .NET Foundation. All rights reserved.
<_DotNetHostFileName Condition="'$(OS)' == 'Windows_NT'">dotnet.exe</_DotNetHostFileName>
</PropertyGroup>

<Target
Name="_ResolveCompressedFiles"
DependsOnTargets="$(ResolveCompressedFilesDependsOn)"
Condition="'$(DisableBuildCompression)' != 'true'">
<!-- Build -->

<ResolveCompressedAssets
CandidateAssets="@(StaticWebAsset)"
Formats="$(BuildCompressionFormats)"
IncludePatterns="$(CompressionIncludePatterns)"
ExcludePatterns="$(CompressionExcludePatterns)"
ExplicitAssets="@(AssetToCompress)"
OutputPath="$(IntermediateOutputPath)compressed">

<Output
TaskParameter="AssetsToCompress"
ItemName="_CompressedStaticWebAssets" />
<Target Name="ResolveBuildCompressedStaticWebAssets" DependsOnTargets="$(ResolveBuildCompressedStaticWebAssetsDependsOn)">
<DefineStaticWebAssets
CandidateAssets="@(_CompressedStaticWebAssets)"
>
<Output TaskParameter="Assets" ItemName="StaticWebAsset" />
</DefineStaticWebAssets>
</Target>

</ResolveCompressedAssets>
<Target Name="GenerateBuildCompressedStaticWebAssets" DependsOnTargets="$(GenerateBuildCompressedStaticWebAssetsDependsOn);$(CompressFilesDependsOn)">

<ItemGroup>
<_StaticWebAssetExcludedFromPack Include="@(_CompressedStaticWebAssets)" />
<StaticWebAsset Include="@(_CompressedStaticWebAssets)" RemoveMetadata="RelatedAssetOriginalItemSpec" />
<_GZipCompressedStaticWebAssets Include="@(_CompressedStaticWebAssets)" Condition="'%(AssetTraitName)' == 'Content-Encoding' and '%(AssetTraitValue)' == 'gzip'" />
<_BrotliCompressedStaticWebAssets Include="@(_CompressedStaticWebAssets)" Condition="'%(AssetTraitName)' == 'Content-Encoding' and '%(AssetTraitValue)' == 'br'" />
</ItemGroup>

</Target>
<GZipCompress Condition="'@(_GZipCompressedStaticWebAssets)' != ''"
FilesToCompress="@(_GZipCompressedStaticWebAssets)" />

<Target
Name="_ResolveCompressedFilesForPublish"
DependsOnTargets="$(ResolveCompressedFilesForPublishDependsOn)"
Condition="'$(DisableBuildCompression)' != 'true'">
<BrotliCompress Condition="'@(_BrotliCompressedStaticWebAssets)' != ''"
FilesToCompress="@(_BrotliCompressedStaticWebAssets)"
CompressionLevel="$(_BlazorBrotliCompressionLevel)"
ToolAssembly="$(_StaticWebAssetsSdkToolAssembly)"
ToolExe="$(_DotNetHostFileName)"
ToolPath="$(_DotNetHostDirectory)" />

<ItemGroup>
<_CandidateAssetsForPublish
Include="@(StaticWebAsset)"
Condition="'%(AssetKind)' != 'Build'" />
<FileWrites Include="@(_GZipCompressedStaticWebAssets)" />
<FileWrites Include="@(_BrotliCompressedStaticWebAssets)" />
</ItemGroup>
</Target>

<Target Name="ResolveBuildCompressedStaticWebAssetsConfiguration" DependsOnTargets="ResolveStaticWebAssetsInputs;$(ResolveCompressedFilesDependsOn)">

<ResolveCompressedAssets
CandidateAssets="@(_CandidateAssetsForPublish)"
Formats="$(PublishCompressionFormats)"
CandidateAssets="@(StaticWebAsset)"
Formats="$(BuildCompressionFormats)"
IncludePatterns="$(CompressionIncludePatterns)"
ExcludePatterns="$(CompressionExcludePatterns)"
ExplicitAssets="@(AssetToCompress)"
OutputPath="$(IntermediateOutputPath)compressed\publish">
OutputPath="$(IntermediateOutputPath)compressed">

<Output
TaskParameter="AssetsToCompress"
ItemName="_CompressedStaticWebAssetsForPublish" />
ItemName="_CompressedStaticWebAssets" />

</ResolveCompressedAssets>

<ItemGroup>
<StaticWebAsset Include="@(_CompressedStaticWebAssetsForPublish)" RemoveMetadata="RelatedAssetOriginalItemSpec" />
<_StaticWebAssetExcludedFromPack Include="@(_CompressedStaticWebAssets)" />
</ItemGroup>

</Target>

<Target
Name="_CompressFiles"
DependsOnTargets="$(CompressFilesDependsOn)"
Condition="'$(DisableBuildCompression)' != 'true'">
<!-- Publish -->

<ItemGroup>
<_GZipCompressedStaticWebAssets Include="@(_CompressedStaticWebAssets)" Condition="'%(AssetTraitName)' == 'Content-Encoding' and '%(AssetTraitValue)' == 'gzip'" />
<_BrotliCompressedStaticWebAssets Include="@(_CompressedStaticWebAssets)" Condition="'%(AssetTraitName)' == 'Content-Encoding' and '%(AssetTraitValue)' == 'br'" />
</ItemGroup>

<GZipCompress Condition="'@(_GZipCompressedStaticWebAssets)' != ''"
FilesToCompress="@(_GZipCompressedStaticWebAssets)" />

<BrotliCompress Condition="'@(_BrotliCompressedStaticWebAssets)' != ''"
FilesToCompress="@(_BrotliCompressedStaticWebAssets)"
CompressionLevel="$(_BlazorBrotliCompressionLevel)"
ToolAssembly="$(_StaticWebAssetsSdkToolAssembly)"
ToolExe="$(_DotNetHostFileName)"
ToolPath="$(_DotNetHostDirectory)" />

<ItemGroup>
<FileWrites Include="@(_GZipCompressedStaticWebAssets)" />
<FileWrites Include="@(_BrotliCompressedStaticWebAssets)" />
</ItemGroup>
<Target Name="ResolvePublishCompressedStaticWebAssets" DependsOnTargets="$(ResolvePublishCompressedStaticWebAssetsDependsOn)">
<DefineStaticWebAssets
CandidateAssets="@(_CompressedStaticWebAssetsForPublish)"
>
<Output TaskParameter="Assets" ItemName="StaticWebAsset" />
</DefineStaticWebAssets>
</Target>

<Target
Name="_CompressFilesForPublish"
DependsOnTargets="$(CompressFilesForPublishDependsOn)"
Condition="'$(DisableBuildCompression)' != 'true'">
<Target Name="GeneratePublishCompressedStaticWebAssets" DependsOnTargets="$(CompressFilesForPublishDependsOn);$(GeneratePublishCompressedStaticWebAssetsDependsOn)">

<ItemGroup>
<_GZipCompressedStaticWebAssetsForPublish Include="@(_CompressedStaticWebAssetsForPublish)" Condition="'%(AssetTraitName)' == 'Content-Encoding' and '%(AssetTraitValue)' == 'gzip'" />
Expand All @@ -312,4 +302,28 @@ Copyright (c) .NET Foundation. All rights reserved.
</ItemGroup>
</Target>

<Target Name="ResolvePublishCompressedStaticWebAssetsConfiguration" DependsOnTargets="ResolvePublishStaticWebAssets;$(ResolveCompressedFilesForPublishDependsOn)">

<ItemGroup>
<_CandidateAssetsForPublish
Include="@(StaticWebAsset)"
Condition="'%(AssetKind)' != 'Build'" />
</ItemGroup>

<ResolveCompressedAssets
CandidateAssets="@(_CandidateAssetsForPublish)"
Formats="$(PublishCompressionFormats)"
IncludePatterns="$(CompressionIncludePatterns)"
ExcludePatterns="$(CompressionExcludePatterns)"
ExplicitAssets="@(AssetToCompress)"
OutputPath="$(IntermediateOutputPath)compressed\publish">

<Output
TaskParameter="AssetsToCompress"
ItemName="_CompressedStaticWebAssetsForPublish" />

</ResolveCompressedAssets>

</Target>

</Project>
Loading