@joebigelow / wix-1 / commits / d5a183de

Try to make building Bal.wixext and IntegrationBurn faster.

Sean Hall committed May 19, 2021 at 10:21 UTC d5a183de3ba20d7baddf5e57e3c9605658524e32
6 files changed +33 -43
src/ext/Bal/test/examples/Wix.Build.props
+1
@@ -6,5 +6,6 @@
6 <TargetExt>.exe</TargetExt>
7 <HarvestDirectoryAdditionalOptions>-generate payloadgroup</HarvestDirectoryAdditionalOptions>
8 <OutputPath>$(OutputPath)examples\</OutputPath>
9 + <DefaultCompressionLevel>None</DefaultCompressionLevel>
10 </PropertyGroup>
11 </Project>
src/test/burn/README.md
+6 -25
@@ -1,6 +1,6 @@
1 # integration
2
3 -This repo is for building installers, and then executing xunit tests that run them and verify that they worked.
3 +This layer is for building installers, and then executing xunit tests that run them and verify that they worked.
4
5 ## Running tests
6
@@ -9,42 +9,23 @@ Depending on who you talk to, these are integration or system-level or end-to-en
9 They modify machine state so it's strongly recommended *not* to run these tests on your dev box.
10 They should be run on a VM instead, where you can easily roll back.
11
12 -1. Run appveyor.cmd to build everything (the tests will refuse to run).
13 -1. Copy the build\Release\netcoreapp3.1 folder to your VM.
14 -1. Open a command prompt and navigate to the netcoreapp3.1 folder.
12 +1. Run build.cmd to build everything (the tests will not automatically run).
13 +1. Copy the build\IntegrationBurn\Debug\netcoreapp3.1 folder to your VM.
14 +1. Open an elevated command prompt and navigate to the netcoreapp3.1 folder.
15 1. Run the runtests.cmd file to run the tests.
16
17 You can modify the runtests.cmd to run specific tests.
18 For example, the following line runs only the specified test:
19
20 -> dotnet test --filter WixToolsetTest.BurnE2E.BasicFunctionalityTests.CanInstallAndUninstallSimpleBundle WixToolsetTest.BurnE2E.dll
20 +> dotnet test --filter WixToolsetTest.BurnE2E.BasicFunctionalityTests.CanInstallAndUninstallSimpleBundle_x86_wixstdba WixToolsetTest.BurnE2E.dll
21
22 The VM must have:
23 1. x64 .NET Core SDK of 5.0 or later (for the test runner)
24 1. Any version of .NET Framework (for the .NET Framework TestBA)
25 1. x86 .NET Core Desktop Runtime of 5.0 or later (for the .NET Core TestBA)
26
27 -## Updating dependencies
28 -
29 -Use the `updatepackage.ps1` script from https://github.com/wixtoolset/Home.
30 -For example:
31 -
32 -* updatepackage.ps1 -TargetFolder path\to\repo -PackageName WixToolset.Bal.wixext -NewVersion 4.0.91
33 -* updatepackage.ps1 -TargetFolder path\to\repo -PackageName WixToolset.Data -NewVersion 4.0.199
34 -* updatepackage.ps1 -TargetFolder path\to\repo -PackageName WixToolset.Dependency.wixext -NewVersion 4.0.25
35 -* updatepackage.ps1 -TargetFolder path\to\repo -PackageName WixToolset.Mba.Core -NewVersion 4.0.52
36 -* updatepackage.ps1 -TargetFolder path\to\repo -PackageName WixToolset.NetFx.wixext -NewVersion 4.0.67
37 -* updatepackage.ps1 -TargetFolder path\to\repo -PackageName WixToolset.Util.wixext -NewVersion 4.0.82
38 -* updatepackage.ps1 -TargetFolder path\to\repo -PackageName WixToolset.Sdk -NewVersion 4.0.0-build-0204
39 -
27 ## Building with local changes
28
42 -The micro repo model makes this very difficult and painful.
43 -The basic idea is to make your changes in each individual repo on the master branch (to get a stable version), commit, and then use appveyor.cmd to build the nuget package.
44 -Put your custom nuget packages into a folder, and modify each repo's nuget.config with an entry to that folder.
45 -
46 -Alternatively, go into the NuGet package cache (%USERPROFILE%\.nuget\packages) and replace the official binaries with your locally built binaries.
47 -
48 -Both of those approaches will poison your NuGet package cache, so you probably will want to run the following command to clear it when you're done:
29 +The current build process will poison your NuGet package cache, so you may have to run the following command to clear it:
30
31 > nuget locals all -clear
\ No newline at end of file
src/wix/WixToolset.Core.Burn/Bundles/CreateBurnManifestCommand.cs
-4
@@ -691,12 +691,8 @@ namespace WixToolset.Core.Burn.Bundles
691
692 writer.WriteStartElement("Payload");
693
694 - // TODO: The engine should be updated to not require FileSize, Hash, or Packaging for UX payloads since the values are never used.
694 writer.WriteAttributeString("Id", payload.Id.Id);
695 writer.WriteAttributeString("FilePath", payload.Name);
697 - writer.WriteAttributeString("FileSize", payload.FileSize.Value.ToString(CultureInfo.InvariantCulture));
698 - writer.WriteAttributeString("Hash", payload.Hash);
699 - writer.WriteAttributeString("Packaging", "embedded");
696 writer.WriteAttributeString("SourcePath", payload.EmbeddedId);
697
698 writer.WriteEndElement();
src/wix/WixToolset.Core.Burn/Bundles/ProcessMsiPackageCommand.cs
-2
@@ -393,7 +393,6 @@ namespace WixToolset.Core.Burn.Bundles
393 Compressed = packagePayload.Compressed,
394 UnresolvedSourceFile = cabinetName,
395 ContainerRef = packagePayload.ContainerRef,
396 - ContentFile = true,
396 DownloadUrl = packagePayload.DownloadUrl,
397 Packaging = packagePayload.Packaging,
398 ParentPackagePayloadRef = packagePayload.Id.Id,
@@ -462,7 +461,6 @@ namespace WixToolset.Core.Burn.Bundles
461 Compressed = packagePayload.Compressed,
462 UnresolvedSourceFile = name,
463 ContainerRef = packagePayload.ContainerRef,
465 - ContentFile = true,
464 DownloadUrl = packagePayload.DownloadUrl,
465 Packaging = packagePayload.Packaging,
466 ParentPackagePayloadRef = packagePayload.Id.Id,
src/wix/WixToolset.Core.Burn/Bundles/ProcessPayloadsCommand.cs
+25 -11
@@ -54,23 +54,37 @@ namespace WixToolset.Core.Burn.Bundles
54
55 this.UpdatePayloadPackagingType(payload);
56
57 - if (!this.PayloadHarvester.HarvestStandardInformation(payload))
57 + if (payload.ContainerRef == BurnConstants.BurnUXContainerName)
58 {
59 - // Remote payloads obviously cannot be embedded.
60 - Debug.Assert(PackagingType.Embedded != payload.Packaging);
59 + Debug.Assert(PackagingType.Embedded == payload.Packaging);
60 +
61 + // Nothing needs to be harvested because the engine only uses Id, Name (FilePath), and EmbeddedId (SourcePath).
62 +
63 + if (payload.ContentFile)
64 + {
65 + trackedFiles.Add(this.BackendHelper.TrackFile(sourceFile.Path, TrackedFileType.Input, payload.SourceLineNumbers));
66 + }
67 }
62 - else // not a remote payload so we have a lot more to update.
68 + else
69 {
64 - // External payloads need to be transfered.
65 - if (PackagingType.External == payload.Packaging)
70 + if (!this.PayloadHarvester.HarvestStandardInformation(payload))
71 {
67 - var transfer = this.BackendHelper.CreateFileTransfer(sourceFile.Path, Path.Combine(this.LayoutDirectory, payload.Name), false, payload.SourceLineNumbers);
68 - fileTransfers.Add(transfer);
72 + // Remote payloads obviously cannot be embedded.
73 + Debug.Assert(PackagingType.Embedded != payload.Packaging);
74 }
70 -
71 - if (payload.ContentFile)
75 + else // not a remote payload so we have a lot more to update.
76 {
73 - trackedFiles.Add(this.BackendHelper.TrackFile(sourceFile.Path, TrackedFileType.Input, payload.SourceLineNumbers));
77 + // External payloads need to be transfered.
78 + if (PackagingType.External == payload.Packaging)
79 + {
80 + var transfer = this.BackendHelper.CreateFileTransfer(sourceFile.Path, Path.Combine(this.LayoutDirectory, payload.Name), false, payload.SourceLineNumbers);
81 + fileTransfers.Add(transfer);
82 + }
83 +
84 + if (payload.ContentFile)
85 + {
86 + trackedFiles.Add(this.BackendHelper.TrackFile(sourceFile.Path, TrackedFileType.Input, payload.SourceLineNumbers));
87 + }
88 }
89 }
90 }
src/wix/test/WixToolsetTest.CoreIntegration/BundleManifestFixture.cs
+1 -1
@@ -219,7 +219,7 @@ namespace WixToolsetTest.CoreIntegration
219 {
220 { "Payload", new List<string> { "FileSize", "Hash", "SourcePath" } },
221 };
222 - Assert.Equal("<Payload Id='ExampleBext' FilePath='fakebext.dll' FileSize='*' Hash='*' Packaging='embedded' SourcePath='*' />", bundleExtensionPayloads[0].GetTestXml(ignored));
222 + Assert.Equal("<Payload Id='ExampleBext' FilePath='fakebext.dll' SourcePath='*' />", bundleExtensionPayloads[0].GetTestXml(ignored));
223 }
224 }
225