Skip to content

Commit ed8917c

Browse files
authored
Merge pull request #1030 from unoplatform/dev/jela/fingerprint-adjust
fix: Adjust fingerprinting update on output override
2 parents 32850b7 + 992d4f1 commit ed8917c

File tree

4 files changed

+99
-0
lines changed

4 files changed

+99
-0
lines changed

build/ci/stage-build-linux-tests.yml

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,18 @@ jobs:
5151
"$(build.sourcesdirectory)/src/Uno.Wasm.Sample.RayTracer/bin/Release/net10.0/publish/wwwroot"
5252
displayName: Validate dotnet.js fingerprint (RayTracer)
5353
54+
## Validate dotnet.js fingerprint with explicit -o flag (different publish code path)
55+
- bash: |
56+
cd $(build.sourcesdirectory)/src/Uno.Wasm.Sample.RayTracer
57+
dotnet clean -c Release
58+
dotnet publish -c Release /m:1 -o $(Agent.TempDirectory)/publish-with-output-flag
59+
displayName: Build RayTracer with -o flag
60+
61+
- bash: |
62+
$(build.sourcesdirectory)/build/scripts/validate-dotnetjs-fingerprint.sh \
63+
"$(Agent.TempDirectory)/publish-with-output-flag/wwwroot"
64+
displayName: Validate dotnet.js fingerprint (with -o flag)
65+
5466
## Raytracer validation
5567
- bash: |
5668
$(build.sourcesdirectory)/build/scripts/run-tests.sh \

build/ci/stage-build-macos-tests.yml

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,18 @@ jobs:
3939
"$(build.sourcesdirectory)/src/Uno.Wasm.StaticLinking.Interpreter/bin/Release/net10.0/publish/wwwroot"
4040
displayName: Validate dotnet.js fingerprint (StaticLinking.Interpreter)
4141
42+
## Validate dotnet.js fingerprint with explicit -o flag (different publish code path)
43+
- bash: |
44+
cd $(build.sourcesdirectory)/src/Uno.Wasm.StaticLinking.Interpreter
45+
dotnet clean -c Release /p:DISABLE_CLIHOST_NET6=true
46+
dotnet publish -c Release /m:1 /p:DISABLE_CLIHOST_NET6=true /p:WasmShellEmccLinkOptimization=false /p:WasmShellILLinkerEnabled=false -o $(Agent.TempDirectory)/publish-with-output-flag
47+
displayName: Build StaticLinking.Interpreter with -o flag
48+
49+
- bash: |
50+
$(build.sourcesdirectory)/build/scripts/validate-dotnetjs-fingerprint.sh \
51+
"$(Agent.TempDirectory)/publish-with-output-flag/wwwroot"
52+
displayName: Validate dotnet.js fingerprint (with -o flag)
53+
4254
- bash: |
4355
$(build.sourcesdirectory)/build/scripts/run-tests.sh \
4456
"$(build.sourcesdirectory)/src/Uno.Wasm.StaticLinking.Interpreter/bin/Release/net10.0/publish/wwwroot" \

build/ci/stage-build-windows-tests.yml

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,18 @@ jobs:
7676
-PublishPath "$(build.sourcesdirectory)\src\Uno.Wasm.Sample.RayTracer\bin\Release\net10.0\publish\wwwroot"
7777
displayName: Validate dotnet.js fingerprint (RayTracer)
7878
79+
## Validate dotnet.js fingerprint with explicit -o flag (different publish code path)
80+
- pwsh: |
81+
cd $(build.sourcesdirectory)/src/Uno.Wasm.Sample.RayTracer
82+
dotnet clean -c Release
83+
dotnet publish -c Release /m:1 -o $(Agent.TempDirectory)\publish-with-output-flag
84+
displayName: Build RayTracer with -o flag
85+
86+
- pwsh: |
87+
$(build.sourcesdirectory)\build\scripts\validate-dotnetjs-fingerprint.ps1 `
88+
-PublishPath "$(Agent.TempDirectory)\publish-with-output-flag\wwwroot"
89+
displayName: Validate dotnet.js fingerprint (with -o flag)
90+
7991
- pwsh: |
8092
$(build.sourcesdirectory)\build\scripts\run-tests-windows.ps1 `
8193
"$(build.sourcesdirectory)\src\Uno.Wasm.Sample.RayTracer\bin\Release\net10.0\publish\wwwroot" `

src/Uno.Wasm.Bootstrap/build/Uno.Wasm.Bootstrap.targets

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -475,6 +475,69 @@
475475
Condition="'$(_UnoDotnetJsFingerprintPublish)' != '' AND Exists('$(_UnoConfigJsPath)')" />
476476
</Target>
477477

478+
<!--
479+
Final safety net: Update uno-config.js directly in the publish output directory.
480+
This runs AFTER files have been copied to ensure the fingerprint is always correct,
481+
regardless of MSBuild target ordering or caching behavior.
482+
-->
483+
<Target Name="_UnoUpdateDotnetJsFingerprintPublishOutput"
484+
AfterTargets="Publish"
485+
Condition="'$(WasmFingerprintDotnetJs)' == 'true'">
486+
487+
<!-- Find the actual dotnet.js file in the publish _framework directory -->
488+
<ItemGroup>
489+
<_UnoPublishedDotnetJs Include="$(PublishDir)wwwroot/_framework/dotnet.*.js"
490+
Exclude="$(PublishDir)wwwroot/_framework/dotnet.native.*.js;$(PublishDir)wwwroot/_framework/dotnet.runtime.*.js" />
491+
</ItemGroup>
492+
493+
<!-- Extract fingerprint from actual filename -->
494+
<PropertyGroup>
495+
<_UnoActualDotnetJsFingerprint>$([System.Text.RegularExpressions.Regex]::Match('%(_UnoPublishedDotnetJs.Filename)', '^dotnet\.([a-z0-9]+)$').Groups[1].Value)</_UnoActualDotnetJsFingerprint>
496+
<_UnoPublishConfigJsPath>$(PublishDir)wwwroot/$(WasmShellOutputPackagePath)/uno-config.js</_UnoPublishConfigJsPath>
497+
</PropertyGroup>
498+
499+
<!-- Update uno-config.js in the publish output with the actual fingerprint -->
500+
<WriteLinesToFile
501+
File="$(_UnoPublishConfigJsPath)"
502+
Lines="$([System.Text.RegularExpressions.Regex]::Replace($([System.Text.RegularExpressions.Regex]::Replace($([System.IO.File]::ReadAllText('$(_UnoPublishConfigJsPath)')), 'config\.dotnet_js_filename = &quot;dotnet(\.[^&quot;]+)?\.js&quot;', 'config.dotnet_js_filename = &quot;dotnet.$(_UnoActualDotnetJsFingerprint).js&quot;')), '_framework/dotnet(\.[^&quot;]+)?\.js', '_framework/dotnet.$(_UnoActualDotnetJsFingerprint).js'))"
503+
Overwrite="true"
504+
Condition="'$(_UnoActualDotnetJsFingerprint)' != '' AND Exists('$(_UnoPublishConfigJsPath)')" />
505+
506+
<Message Importance="normal"
507+
Text="Updated uno-config.js with dotnet.js fingerprint: $(_UnoActualDotnetJsFingerprint)"
508+
Condition="'$(_UnoActualDotnetJsFingerprint)' != ''" />
509+
</Target>
510+
511+
<!--
512+
Validate that uno-config.js fingerprint matches the actual dotnet.js file.
513+
-->
514+
<Target Name="_UnoValidateDotnetJsFingerprintPublish"
515+
AfterTargets="_UnoUpdateDotnetJsFingerprintPublishOutput"
516+
Condition="'$(WasmFingerprintDotnetJs)' == 'true' AND '$(UnoSkipDotnetJsFingerprintValidation)' != 'true'">
517+
518+
<PropertyGroup>
519+
<_UnoPublishConfigJsPath>$(PublishDir)wwwroot/$(WasmShellOutputPackagePath)/uno-config.js</_UnoPublishConfigJsPath>
520+
<_UnoFrameworkPath>$(PublishDir)wwwroot/_framework</_UnoFrameworkPath>
521+
</PropertyGroup>
522+
523+
<PropertyGroup Condition="Exists('$(_UnoPublishConfigJsPath)')">
524+
<_UnoConfigContent>$([System.IO.File]::ReadAllText('$(_UnoPublishConfigJsPath)'))</_UnoConfigContent>
525+
<_UnoConfigFingerprint>$([System.Text.RegularExpressions.Regex]::Match('$(_UnoConfigContent)', 'dotnet\.([a-z0-9]+)\.js').Groups[1].Value)</_UnoConfigFingerprint>
526+
</PropertyGroup>
527+
528+
<Error Condition="'$(_UnoConfigFingerprint)' == ''"
529+
Code="UNOWASM001"
530+
Text="uno-config.js does not contain a fingerprinted dotnet.js reference." />
531+
532+
<Error Condition="'$(_UnoConfigFingerprint)' != '' AND !Exists('$(_UnoFrameworkPath)/dotnet.$(_UnoConfigFingerprint).js')"
533+
Code="UNOWASM002"
534+
Text="Fingerprint mismatch: uno-config.js references dotnet.$(_UnoConfigFingerprint).js but file does not exist in $(_UnoFrameworkPath)." />
535+
536+
<Message Importance="normal"
537+
Text="Validated: uno-config.js fingerprint ($(_UnoConfigFingerprint)) matches actual dotnet.js file"
538+
Condition="'$(_UnoConfigFingerprint)' != ''" />
539+
</Target>
540+
478541
<PropertyGroup>
479542
<UnoEnableEmccProfiling_BeforeTargets>
480543
$(UnoEnableEmccProfiling_BeforeTargets);

0 commit comments

Comments
 (0)