Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions DebUOS/Packaging.DebUOS.NuGet/Build/package.targets
Original file line number Diff line number Diff line change
Expand Up @@ -278,6 +278,11 @@
<DebUOSPackingWriteArgLine Include="$(Png512x512IconFile)"/>
<DebUOSPackingWriteArgLine Include=">"/>

<DebUOSPackingWriteArgLine Include=">"/>
<DebUOSPackingWriteArgLine Include="ExcludePackingDebFileExtensions" Condition="$(ExcludePackingDebFileExtensions)!=''"/>
<DebUOSPackingWriteArgLine Include="$([MSBuild]::Escape($(ExcludePackingDebFileExtensions)))"/>
<DebUOSPackingWriteArgLine Include=">"/>

</ItemGroup>
<WriteLinesToFile File="$(DebUOSPackingArgsFile)" Lines="@(DebUOSPackingWriteArgLine)" Overwrite="True" />
<Exec Command="dotnet &quot;$(MSBuildThisFileDirectory)..\tools\Packaging.DebUOS.Tool.dll&quot; -p $(DebUOSPackingArgsFile)" />
Expand Down
4 changes: 3 additions & 1 deletion DebUOS/Packaging.DebUOS.Tool/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -53,9 +53,11 @@
var packingFolder = new DirectoryInfo(configuration.PackingFolder!);
var outputDebFile = new FileInfo(configuration.DebUOSOutputFilePath!);
var workingFolder = new DirectoryInfo(configuration.WorkingFolder!);
var excludePackingDebFileExtensionsPredicate = configuration.ToExcludePackingDebFileExtensionsPredicate();

var debUosPackageCreator = new DebUOSPackageCreator(logger);
debUosPackageCreator.PackageDeb(packingFolder, outputDebFile, workingFolder);
debUosPackageCreator.PackageDeb(packingFolder, outputDebFile, workingFolder,
optFileCanIncludePredicate: entry => /*取反,因为配置是不包括*/ !excludePackingDebFileExtensionsPredicate(entry));
}
else
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -522,4 +522,19 @@ public string? Png512x512IconFile
set => SetValue(value);
get => GetString();
}

#region 打包控制相关

/// <summary>
/// 打包时应该有哪些后缀被排除,默认包括 .pdb .dbg .md 文件
/// 如果有其他特殊规则,请自行编写 Target 在 CreateDebUOS 之前删除掉
/// </summary>
/// <example>.pdb;.dbg;.md</example>
public string? ExcludePackingDebFileExtensions
{
set => SetValue(value);
get => GetString() ?? ".pdb;.dbg;.md";
}

#endregion
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
using System;
using System.IO;
using System.Linq;

namespace Packaging.DebUOS.Contexts.Configurations;

public static class DebUOSConfigurationExtension
{
public static Predicate<string> ToExcludePackingDebFileExtensionsPredicate(this DebUOSConfiguration configuration)
{
var excludePackingDebFileExtensions = configuration.ExcludePackingDebFileExtensions;
var extensions = excludePackingDebFileExtensions?.Split(';');
if (extensions is null || extensions.Length == 0)
{
return static _ => true;
}

return entry =>
{
var file = entry;
var extension = Path.GetExtension(file);
return extensions.Contains(extension);
};
}
}
6 changes: 4 additions & 2 deletions DebUOS/Packaging.DebUOS/DebUOSPackageCreator.cs
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,8 @@ public DebUOSPackageCreator(ILogger logger)

public ILogger Logger { get; }

public void PackageDeb(DirectoryInfo packingFolder, FileInfo outputDebFile, DirectoryInfo? workingFolder = null)
public void PackageDeb(DirectoryInfo packingFolder, FileInfo outputDebFile, DirectoryInfo? workingFolder = null,
Predicate<string>? optFileCanIncludePredicate = null)
{
Logger.LogInformation($"开始打包。Start packaging UOS deb from '{packingFolder.FullName}' to '{outputDebFile.FullName}'");

Expand All @@ -38,10 +39,11 @@ public void PackageDeb(DirectoryInfo packingFolder, FileInfo outputDebFile, Dire

var optFolder = Path.Combine(packingFolder.FullName, "opt");

// 压缩文件夹里面的文件
var archiveEntries = archiveBuilder.FromDirectory(
optFolder,
null,
"/opt");
"/opt", optFileCanIncludePredicate);

EnsureDirectories(archiveEntries);

Expand Down
14 changes: 12 additions & 2 deletions DebUOS/Packaging.DebUOS/DebUOSPackageFileStructCreator.cs
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,11 @@ public DebUOSPackageFileStructCreator(ILogger logger)

public ILogger Logger { get; }

/// <summary>
/// 创建符合 UOS 安装包制作规范的打包文件夹,后续此文件夹完全支持 dpkg 工具直接打包
/// </summary>
/// <param name="configuration"></param>
/// <exception cref="PackagingException"></exception>
public void CreatePackagingFolder(DebUOSConfiguration configuration)
{
var projectPublishFolder = configuration.ProjectPublishFolder;
Expand Down Expand Up @@ -56,13 +61,18 @@ public void CreatePackagingFolder(DebUOSConfiguration configuration)
// 删除旧的文件夹,防止打包使用到旧文件
if (Directory.Exists(packingFolder))
{
// 这里不能使用 PackageDirectory.Delete 进行删除文件,因为可能里面建立了符号链接。这将导致错误删除了原本 bin 文件夹下的发布输出的文件
Directory.Delete(packingFolder, true);
PackageDirectory.Delete(packingFolder);
}

Directory.CreateDirectory(packingFolder);
configuration.PackingFolder = packingFolder;

if (File.Exists(configuration.DebUOSOutputFilePath))
{
// 如果存在输出文件,则先删除,防止后续又将其加入压缩文件
File.Delete(configuration.DebUOSOutputFilePath);
}

var appId = configuration.UOSAppId;
if (string.IsNullOrEmpty(appId))
{
Expand Down
4 changes: 2 additions & 2 deletions DebUOS/Packaging.DebUOS/Packaging.DebUOS.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
<!-- BoncyCastle and SharpZipLib are included in the lib\ folder in the Packaging.Targets package (see below), so we don't need an
explicit dependency on them, either -->
<PackageReference Include="dotnetCampus.CommandLine" Version="3.3.1" />
<PackageReference Include="dotnetCampus.Configurations" Version="1.6.11" />
<PackageReference Include="dotnetCampus.Configurations" Version="1.6.12" />

<PackageReference Include="dotnetCampus.MSBuildUtils.Source" Version="1.1.1-alpha01">
<PrivateAssets>all</PrivateAssets>
Expand All @@ -22,7 +22,7 @@

<PackageReference Include="Microsoft.Extensions.Logging.Console" Version="8.0.0" />

<PackageReference Include="Walterlv.IO.PackageManagement" Version="7.6.0" />
<PackageReference Include="Walterlv.IO.PackageManagement" Version="7.9.0" />
</ItemGroup>

<ItemGroup>
Expand Down
16 changes: 12 additions & 4 deletions DebUOS/Packaging.Targets/ArchiveBuilder.cs
Original file line number Diff line number Diff line change
Expand Up @@ -198,13 +198,15 @@ public List<ArchiveEntry> FromCpio(CpioFile file)
/// <param name="metadata">
/// Additional metadata to use.
/// </param>
/// <param name="fileCanIncludePredicate">文件是否能够被包含,为空则全部包含</param>
/// <returns>
/// A list of <see cref="ArchiveEntry"/> objects representing the data in the directory.
/// </returns>
public List<ArchiveEntry> FromDirectory(string directory, string? appHost, string prefix/*, ITaskItem[] metadata*/)
#nullable enable
public List<ArchiveEntry> FromDirectory(string directory, string? appHost, string prefix/*, ITaskItem[] metadata*/, Predicate<string>? fileCanIncludePredicate)
{
List<ArchiveEntry> value = new List<ArchiveEntry>();
this.AddDirectory(directory, string.Empty, prefix, value/*, metadata*/);
this.AddDirectory(directory, string.Empty, prefix, value/*, metadata*/, fileCanIncludePredicate);

// Add a symlink to appHost, if available
if (appHost != null)
Expand All @@ -226,7 +228,7 @@ public List<ArchiveEntry> FromDirectory(string directory, string? appHost, strin
return value;
}

protected void AddDirectory(string directory, string relativePath, string prefix, List<ArchiveEntry> value/*, ITaskItem[] metadata*/)
protected void AddDirectory(string directory, string relativePath, string prefix, List<ArchiveEntry> value/*, ITaskItem[] metadata*/, Predicate<string>? fileCanIncludePredicate)
{
this._inode++;

Expand All @@ -239,11 +241,17 @@ protected void AddDirectory(string directory, string relativePath, string prefix
{
if (File.Exists(entry))
{
if (fileCanIncludePredicate is not null && !fileCanIncludePredicate(entry))
{
// 如果不能被包含的,则忽略
continue;
}

this.AddFile(entry, relativePath + Path.GetFileName(entry), prefix, value/*, metadata*/);
}
else
{
this.AddDirectory(entry, relativePath + Path.GetFileName(entry) + "/", prefix + "/" + Path.GetFileName(entry), value/*, metadata*/);
this.AddDirectory(entry, relativePath + Path.GetFileName(entry) + "/", prefix + "/" + Path.GetFileName(entry), value/*, metadata*/, fileCanIncludePredicate);
}
}
}
Expand Down