Skip to content

Commit a2acf3d

Browse files
authored
Refactor EXE packaging to avoid temp files (#137)
* Refactor EXE packaging to avoid temp files * Remove `UninstallLauncher.exe` from resources * Refactor ExePackagingService to use IContainer and avoid intermediate disk writes - Change BuildFromDirectory/Project to return Result<IContainer> instead of FileInfo. - Remove direct file writing from ExePackagingService; delegate to caller via Zafiro.DivineBytes. - Remove standalone Uninstaller.exe from output (it remains embedded in the installer). - Update CLI ExeCommand and tests to handle the new API. * Refactor Exe packaging to use Zafiro.DivineBytes and remove Zafiro.FileSystem dependencies
1 parent 0bc40ab commit a2acf3d

File tree

25 files changed

+493
-443
lines changed

25 files changed

+493
-443
lines changed

src/DotnetPackaging.AppImage/GlobalUsings.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,3 @@
22

33
global using CSharpFunctionalExtensions;
44
global using Zafiro.CSharpFunctionalExtensions;
5-
global using Zafiro.FileSystem;
-11.6 MB
Binary file not shown.
Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,25 @@
1+
using System.IO;
2+
using CSharpFunctionalExtensions;
3+
using Zafiro.DivineBytes;
4+
15
namespace DotnetPackaging.Exe;
26

37
public static class BuildScript
48
{
5-
public static void Build()
9+
public static async Task<Result> Build(
10+
IByteSource stub,
11+
IContainer publishDirectory,
12+
InstallerMetadata metadata,
13+
Maybe<IByteSource> logo,
14+
FileInfo installerOutput,
15+
FileInfo uninstallerOutput)
616
{
7-
var stub = "build/Stub.exe"; // firmado
8-
var installerPayload = "build/installer_payload.zip";
9-
var uninstallerPayload = "build/uninstaller_payload.zip";
17+
var buildResult = await SimpleExePacker.Build(stub, publishDirectory, metadata, logo);
18+
if (buildResult.IsFailure)
19+
{
20+
return Result.Failure(buildResult.Error);
21+
}
1022

11-
PayloadAppender.AppendPayload(stub, uninstallerPayload, "artifacts/Uninstaller.exe");
12-
PayloadAppender.AppendPayload(stub, installerPayload, "artifacts/Installer.exe");
23+
return await buildResult.Value.WriteTo(installerOutput, uninstallerOutput);
1324
}
1425
}

src/DotnetPackaging.Exe/DotnetPackaging.Exe.csproj

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88
<Import Project="..\Common.props" />
99
<ItemGroup>
1010
<PackageReference Include="Serilog" />
11+
<PackageReference Include="System.IO.Abstractions" />
12+
<PackageReference Include="TestableIO.System.IO.Abstractions.Wrappers" />
1113
</ItemGroup>
1214
<ItemGroup>
1315
<ProjectReference Include="..\DotnetPackaging\DotnetPackaging.csproj" />
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
using CSharpFunctionalExtensions;
2+
using Zafiro.DivineBytes;
3+
4+
namespace DotnetPackaging.Exe;
5+
6+
public sealed record ExeBuildArtifacts(IByteSource Installer, IByteSource Uninstaller)
7+
{
8+
public async Task<Result> WriteTo(FileInfo installerPath, FileInfo uninstallerPath)
9+
{
10+
var installerResult = await Installer.WriteTo(installerPath.FullName);
11+
var uninstallerResult = await Uninstaller.WriteTo(uninstallerPath.FullName);
12+
return Result.Combine(installerResult, uninstallerResult);
13+
}
14+
}

0 commit comments

Comments
 (0)