Skip to content

Commit

Permalink
WIP Add Dedupe MSBuild task
Browse files Browse the repository at this point in the history
  • Loading branch information
bording committed Feb 24, 2024
1 parent 9464a03 commit 9b09a65
Show file tree
Hide file tree
Showing 5 changed files with 117 additions and 2 deletions.
1 change: 1 addition & 0 deletions src/Directory.Packages.props
Expand Up @@ -16,6 +16,7 @@
<PackageVersion Include="HdrHistogram" Version="2.5.0" />
<PackageVersion Include="Microsoft.AspNetCore.Mvc.Testing" Version="8.0.0" />
<PackageVersion Include="Microsoft.AspNetCore.SignalR.Client" Version="8.0.0" />
<PackageVersion Include="Microsoft.Build.Utilities.Core" Version="17.9.5" />
<PackageVersion Include="Microsoft.Data.SqlClient" Version="5.1.5" />
<PackageVersion Include="Microsoft.Extensions.DependencyInjection" Version="8.0.0" />
<PackageVersion Include="Microsoft.Extensions.DependencyModel" Version="8.0.0" />
Expand Down
15 changes: 15 additions & 0 deletions src/ServiceControl.sln
Expand Up @@ -153,6 +153,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LegacyArtifacts", "LegacyAr
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Testing", "Testing", "{E067C14F-867B-4479-BC85-39F2AFAF25D0}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ServiceControlInstaller.Packaging.Tasks", "ServiceControlInstaller.Packaging.Tasks\ServiceControlInstaller.Packaging.Tasks.csproj", "{7320FA4B-9AA6-47FB-95A7-02B687D79904}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Expand Down Expand Up @@ -821,6 +823,18 @@ Global
{38147B68-13EE-48DC-BB38-4217889978AE}.Release|x64.Build.0 = Release|Any CPU
{38147B68-13EE-48DC-BB38-4217889978AE}.Release|x86.ActiveCfg = Release|Any CPU
{38147B68-13EE-48DC-BB38-4217889978AE}.Release|x86.Build.0 = Release|Any CPU
{7320FA4B-9AA6-47FB-95A7-02B687D79904}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{7320FA4B-9AA6-47FB-95A7-02B687D79904}.Debug|Any CPU.Build.0 = Debug|Any CPU
{7320FA4B-9AA6-47FB-95A7-02B687D79904}.Debug|x64.ActiveCfg = Debug|Any CPU
{7320FA4B-9AA6-47FB-95A7-02B687D79904}.Debug|x64.Build.0 = Debug|Any CPU
{7320FA4B-9AA6-47FB-95A7-02B687D79904}.Debug|x86.ActiveCfg = Debug|Any CPU
{7320FA4B-9AA6-47FB-95A7-02B687D79904}.Debug|x86.Build.0 = Debug|Any CPU
{7320FA4B-9AA6-47FB-95A7-02B687D79904}.Release|Any CPU.ActiveCfg = Release|Any CPU
{7320FA4B-9AA6-47FB-95A7-02B687D79904}.Release|Any CPU.Build.0 = Release|Any CPU
{7320FA4B-9AA6-47FB-95A7-02B687D79904}.Release|x64.ActiveCfg = Release|Any CPU
{7320FA4B-9AA6-47FB-95A7-02B687D79904}.Release|x64.Build.0 = Release|Any CPU
{7320FA4B-9AA6-47FB-95A7-02B687D79904}.Release|x86.ActiveCfg = Release|Any CPU
{7320FA4B-9AA6-47FB-95A7-02B687D79904}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
Expand Down Expand Up @@ -890,6 +904,7 @@ Global
{4F2CAFC7-113A-4D31-A365-6669AB4C7787} = {350F72AB-142D-4AAD-9EF1-1A83DC991D87}
{38147B68-13EE-48DC-BB38-4217889978AE} = {55C388DD-2B39-4C2F-AEBD-AFD3444815F1}
{E067C14F-867B-4479-BC85-39F2AFAF25D0} = {E2249BAA-D9E9-4369-9C70-0E21C69A3E56}
{7320FA4B-9AA6-47FB-95A7-02B687D79904} = {55C388DD-2B39-4C2F-AEBD-AFD3444815F1}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {3B9E5B72-F580-465A-A22C-2D2148AF4EB4}
Expand Down
58 changes: 58 additions & 0 deletions src/ServiceControlInstaller.Packaging.Tasks/DedupeArtifactsTask.cs
@@ -0,0 +1,58 @@
namespace ServiceControlInstaller.Packaging.Tasks;

using Microsoft.Build.Framework;
using Microsoft.Build.Utilities;

public class DedupeArtifactsTask : Task
{
[Required]
public string ArtifactsPath { get; set; } = string.Empty;

public override bool Execute()
{
var sharedPath = Path.Combine(ArtifactsPath, "InstanceShared");

var primary = Path.Combine(ArtifactsPath, "Particular.ServiceControl\\ServiceControl");
var audit = Path.Combine(ArtifactsPath, "Particular.ServiceControl.Audit\\ServiceControl.Audit");
var monitoring = Path.Combine(ArtifactsPath, "Particular.ServiceControl.Monitoring\\ServiceControl.Monitoring");

var primaryFiles = EnumerateFiles(primary);
var auditFiles = EnumerateFiles(audit);
var monitoringFiles = EnumerateFiles(monitoring);

primaryFiles.IntersectWith(auditFiles);
primaryFiles.IntersectWith(monitoringFiles);

foreach (var file in primaryFiles)
{
var destination = Path.Combine(sharedPath, file);
var destinationPath = Path.GetDirectoryName(destination);

if (!string.IsNullOrWhiteSpace(destinationPath) && !Directory.Exists(destinationPath))
{
Directory.CreateDirectory(destinationPath);
}

File.Copy(Path.Combine(primary, file), destination, true);

File.Delete(Path.Combine(primary, file));
File.Delete(Path.Combine(audit, file));
File.Delete(Path.Combine(monitoring, file));
}

return true;
}

static HashSet<string> EnumerateFiles(string path)
{
HashSet<string> files = [];

foreach (var file in Directory.EnumerateFiles(path, "*", SearchOption.AllDirectories))
{
var fileName = file.Substring(path.Length + 1);
files.Add(fileName);
}

return files;
}
}
@@ -0,0 +1,14 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFrameworks>net472;net8.0</TargetFrameworks>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<LangVersion>12.0</LangVersion>
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Microsoft.Build.Utilities.Core" PrivateAssets="All" />
</ItemGroup>

</Project>
Expand Up @@ -4,6 +4,10 @@
<TargetFramework>net8.0</TargetFramework>
</PropertyGroup>

<ItemGroup>
<ProjectReference Include="..\ServiceControlInstaller.Packaging.Tasks\ServiceControlInstaller.Packaging.Tasks.csproj" />
</ItemGroup>

<ItemGroup Label="Instances">
<ProjectReference Include="..\ServiceControl\ServiceControl.csproj" />
<ProjectReference Include="..\ServiceControl.Audit\ServiceControl.Audit.csproj" />
Expand All @@ -25,15 +29,33 @@
<Primary>Particular.ServiceControl</Primary>
<Audit>Particular.ServiceControl.Audit</Audit>
<Monitoring>Particular.ServiceControl.Monitoring</Monitoring>
<InstanceShared>InstanceShared</InstanceShared>
<Transports>Transports</Transports>
<RavenDBServer>RavenDBServer</RavenDBServer>
</PropertyGroup>

<Target Name="PrepareCreateZipFiles">

<PropertyGroup>
<PackagingTasksPath Condition="'$(MSBuildRuntimeType)' == 'Core'">$(MSBuildThisFileDirectory)..\ServiceControlInstaller.Packaging.Tasks\bin\$(Configuration)\net8.0\ServiceControlInstaller.Packaging.Tasks.dll</PackagingTasksPath>
<PackagingTasksPath Condition="'$(MSBuildRuntimeType)' != 'Core'">$(MSBuildThisFileDirectory)..\ServiceControlInstaller.Packaging.Tasks\bin\$(Configuration)\net472\ServiceControlInstaller.Packaging.Tasks.dll</PackagingTasksPath>
</PropertyGroup>

<UsingTask TaskName="ServiceControlInstaller.Packaging.Tasks.DedupeArtifactsTask" AssemblyFile="$(PackagingTasksPath)" />

<Target Name="Dedupe">



<DedupeArtifactsTask ArtifactsPath="$(ArtifactsPath)" />

</Target>

<Target Name="PrepareCreateZipFiles" DependsOnTargets="Dedupe">
<ItemGroup>
<PrimaryFilesToZip Include="$(ArtifactsPath)$(Primary)\**\*" />
<AuditFilesToZip Include="$(ArtifactsPath)$(Audit)\**\*" />
<MonitoringFilesToZip Include="$(ArtifactsPath)$(Monitoring)\**\*" />
<InstanceSharedFilesToZip Include="$(ArtifactsPath)$(InstanceShared)\**\*" />
<TransportsFilesToZip Include="$(ArtifactsPath)$(Transports)\**\*" />
<RavenDBServerFilesToZip Include="$(ArtifactsPath)$(RavenDBServer)\**\*" />
</ItemGroup>
Expand All @@ -54,6 +76,11 @@
<ZipDirectory SourceDirectory="$(ArtifactsPath)$(Monitoring)" DestinationFile="$(ZipFolder)$(Monitoring).zip" Overwrite="true" />
</Target>

<Target Name="CreateInstanceSharedZipFile" AfterTargets="CopyArtifacts" DependsOnTargets="PrepareCreateZipFiles" Inputs="@(InstanceSharedFilesToZip)" Outputs="$(ZipFolder)$(InstanceShared).zip">
<MakeDir Directories="$(ZipFolder)" />
<ZipDirectory SourceDirectory="$(ArtifactsPath)$(InstanceShared)" DestinationFile="$(ZipFolder)$(InstanceShared).zip" Overwrite="true" />
</Target>

<Target Name="CreateTransportsZipFile" AfterTargets="CopyArtifacts" DependsOnTargets="PrepareCreateZipFiles" Inputs="@(TransportsFilesToZip)" Outputs="$(ZipFolder)$(Transports).zip">
<MakeDir Directories="$(ZipFolder)" />
<ZipDirectory SourceDirectory="$(ArtifactsPath)$(Transports)" DestinationFile="$(ZipFolder)$(Transports).zip" Overwrite="true" />
Expand All @@ -64,4 +91,4 @@
<ZipDirectory SourceDirectory="$(ArtifactsPath)$(RavenDBServer)" DestinationFile="$(ZipFolder)$(RavenDBServer).zip" Overwrite="true" />
</Target>

</Project>
</Project>

0 comments on commit 9b09a65

Please sign in to comment.