fix: ship the third-party license notices in the MSI (#70) - #93
Merged
Conversation
The installers redistribute the Microsoft VC++ runtime, the Vulkan loader and DirectML, so they have to carry the license notices covering them. Only the NSIS installer did. #69 staged THIRD_PARTY_NOTICES.md next to the exe on the assumption the WiX bundler would harvest it as a sibling, but WiX harvests the binaries collection and the configured resources, not an arbitrary .md, so the released MSI shipped the DLLs without their notices. Declare the file as a real bundle resource instead, which both bundlers install, and drop the NSIS File/Delete lines and the beforeBundleCommand staging that worked around its absence. The explicit File line would otherwise write it twice. bundle.resources moves to the map form because neither alternative works: in the list form Tauri rewrites a leading .. to a literal _up_ directory (tauri-utils resource_relpath), landing the file at _up_/THIRD_PARTY_NOTICES.md, and a glob key in the map form copies matches to the target without preserving structure, which would flatten resources/models/silero_vad_v4.onnx and regress the model path #56 just fixed. A directory key preserves the layout.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Before submitting
Nothing skipped. Both installers were built in CI and their payloads inspected — see Testing.
Description
The MSI shipped the runtime DLLs without the third-party notices that cover them, which is the license-compliance gap #69 set out to close but only closed on the NSIS side.
bundle.resourcesnow declares the notices file as a real resource, so both bundlers place it. With that in place, the two mechanisms #69 used to work around the gap are gone: the explicitFile/Deletepair insrc-tauri/nsis/installer.nsi(the template's own{{#each resources}}loops now install and uninstall it), and the staging block inscripts/bundle-runtime-dlls.mjs. That script keeps staging the VC++ and Vulkan DLLs and verifyingDirectML.dll; only the notices block was removed. Its comment claimed the MSI harvests the file as a sibling of the exe, which is the false premise behind #70 — WiX harvests the binaries collection and the configured resources, not arbitrary files staged next to the exe.The resources block had to change from list form to map form, which is the non-obvious part:
["../THIRD_PARTY_NOTICES.md"]) rewrites a leading..to a literal_up_directory, so the file would install to_up_/THIRD_PARTY_NOTICES.md(resource_relpath()intauri-utilsmapsComponent::ParentDirto_up_). Map form keeps..in the source path.resources/models/silero_vad_v4.onnxtoresources/silero_vad_v4.onnxand reopen [BUG] Parakeet fails to load on non-ASCII Windows profile paths (default-engine crash) #56. A directory key preserves structure, so\"resources/\": \"resources/\"is used rather than\"resources/**/*\".Related issues
Fixes #70. Follow-up to #69; the removed NSIS lines were added there, and #45 is the original notices issue.
Testing
Built both installers in CI (run 29512763139,
workflow_dispatchwithmake_release=false, so no release was touched) and inspected the payloads rather than trusting the config.MSI — read via the
WindowsInstallerCOM API, reconstructing install paths by walking File to Component to Directory:THIRD_PARTY_NOTICES.md, 13,783 bytes.PFiles\AudioBud\THIRD_PARTY_NOTICES.md— the install root, matching where NSIS puts it.resources\models\silero_vad_v4.onnxandresources\models\gigaam_vocab.txtare still nested, not flattened. This is the [BUG] Parakeet fails to load on non-ASCII Windows profile paths (default-engine crash) #56 regression check.NSIS — silently installed the built
AudioBud_0.3.1_x64-setup.exeon Windows 11 and enumerated the tree:THIRD_PARTY_NOTICES.md(13,783 bytes) present exactly once, at the install root. No duplicate anywhere in the tree.resources\models\silero_vad_v4.onnx(1,807,522 bytes) still nested; no flattened copy atresources\silero_vad_v4.onnx.DirectML.dllstill present, so removing the notices block did not disturb DLL staging.