mirror of
https://github.com/MaaAssistantArknights/MaaAssistantArknights.git
synced 2026-07-15 17:30:27 +08:00
feat: 更新打包工具
This commit is contained in:
48
.github/workflows/release-maa-resource.yml
vendored
48
.github/workflows/release-maa-resource.yml
vendored
@@ -1,48 +0,0 @@
|
||||
# ------------------------------------------------------------------------------
|
||||
# <auto-generated>
|
||||
#
|
||||
# This code was generated.
|
||||
#
|
||||
# - To turn off auto-generation set:
|
||||
#
|
||||
# [GitHubActions (AutoGenerate = false)]
|
||||
#
|
||||
# - To trigger manual generation invoke:
|
||||
#
|
||||
# nuke --generate-configuration GitHubActions_release-maa-resource --host GitHubActions
|
||||
#
|
||||
# </auto-generated>
|
||||
# ------------------------------------------------------------------------------
|
||||
|
||||
name: release-maa-resource
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
paths:
|
||||
- 'resource/**'
|
||||
- '3rdparty/resource/**'
|
||||
|
||||
jobs:
|
||||
windows-latest:
|
||||
name: windows-latest
|
||||
runs-on: windows-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v1
|
||||
- name: Cache .nuke/temp, ~/.nuget/packages
|
||||
uses: actions/cache@v2
|
||||
with:
|
||||
path: |
|
||||
.nuke/temp
|
||||
~/.nuget/packages
|
||||
key: ${{ runner.os }}-${{ hashFiles('**/global.json', '**/*.csproj') }}
|
||||
- name: Run './build.cmd ReleaseMaaResource'
|
||||
run: ./build.cmd ReleaseMaaResource
|
||||
env:
|
||||
PUBLISH_GH_PAT: ${{ secrets.PUBLISH_GH_PAT }}
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
- uses: actions/upload-artifact@v1
|
||||
with:
|
||||
name: artifacts
|
||||
path: artifacts
|
||||
@@ -66,7 +66,6 @@
|
||||
"Default",
|
||||
"DevBuild",
|
||||
"ReleaseMaa",
|
||||
"ReleaseMaaResource",
|
||||
"SetMaaChangeLog",
|
||||
"SetPackageBundled",
|
||||
"SetVersion",
|
||||
@@ -75,13 +74,10 @@
|
||||
"UseMaaChangeLog",
|
||||
"UseMaaDevBundle",
|
||||
"UseMaaRelease",
|
||||
"UseMaaResource",
|
||||
"UseMaaResourceChangeLog",
|
||||
"UsePublishArtifact",
|
||||
"UsePublishRelease",
|
||||
"UseTagVersion",
|
||||
"WithCompileCoreRelease",
|
||||
"WithCompileResourceRelease",
|
||||
"WithCompileWpfRelease"
|
||||
]
|
||||
}
|
||||
@@ -95,7 +91,6 @@
|
||||
"Default",
|
||||
"DevBuild",
|
||||
"ReleaseMaa",
|
||||
"ReleaseMaaResource",
|
||||
"SetMaaChangeLog",
|
||||
"SetPackageBundled",
|
||||
"SetVersion",
|
||||
@@ -104,13 +99,10 @@
|
||||
"UseMaaChangeLog",
|
||||
"UseMaaDevBundle",
|
||||
"UseMaaRelease",
|
||||
"UseMaaResource",
|
||||
"UseMaaResourceChangeLog",
|
||||
"UsePublishArtifact",
|
||||
"UsePublishRelease",
|
||||
"UseTagVersion",
|
||||
"WithCompileCoreRelease",
|
||||
"WithCompileResourceRelease",
|
||||
"WithCompileWpfRelease"
|
||||
]
|
||||
}
|
||||
|
||||
@@ -2,21 +2,23 @@
|
||||
{
|
||||
"name_template": "MaaBundle-{VERSION}",
|
||||
"type": "MaaBundle",
|
||||
"configuration": { }
|
||||
"configuration": {
|
||||
"include": [
|
||||
"**"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name_template": "MaaBundle-OTA-{VERSION}",
|
||||
"type": "MaaBundleOta",
|
||||
"configuration": {
|
||||
"include": [
|
||||
"resource/**",
|
||||
"MeoAssistant.dll",
|
||||
"MeoAsstGui.exe"
|
||||
],
|
||||
"exclude": [
|
||||
"libiomp5md.dll",
|
||||
"mkldnn.dll",
|
||||
"mklml.dll",
|
||||
"opencv_world453.dll",
|
||||
"paddle_inference.dll",
|
||||
"ppocr.dll",
|
||||
"aria2c.exe",
|
||||
"resource/PaddleOCR/**"
|
||||
"**/PaddleOCR/**"
|
||||
]
|
||||
}
|
||||
},
|
||||
@@ -37,9 +39,10 @@
|
||||
"libiomp5md.dll",
|
||||
"mkldnn.dll",
|
||||
"mklml.dll",
|
||||
"opencv_world453.dll",
|
||||
"paddle_inference.dll",
|
||||
"ppocr.dll"
|
||||
"ppocr.dll",
|
||||
"opencv_world453.dll",
|
||||
"**/PaddleOCR/**"
|
||||
]
|
||||
}
|
||||
},
|
||||
@@ -48,12 +51,22 @@
|
||||
"type": "MaaDependencyNoAvx",
|
||||
"configuration": {
|
||||
"include": [
|
||||
"libiomp5md.dll",
|
||||
"mkldnn.dll",
|
||||
"mklml.dll",
|
||||
"opencv_world453.dll"
|
||||
"opencv_world453.dll",
|
||||
"**/PaddleOCR/**"
|
||||
],
|
||||
"no_avx_bundle": "3rdparty/ppocr_noavx.zip"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name_template": "MaaResource-{VERSION}",
|
||||
"type": "MaaResource",
|
||||
"configuration": {
|
||||
"include": [
|
||||
"resource/**"
|
||||
],
|
||||
"exclude": [
|
||||
"**/PaddleOCR/**"
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
|
||||
@@ -1,19 +0,0 @@
|
||||
using Nuke.Common.CI.GitHubActions;
|
||||
|
||||
namespace MaaBuilder;
|
||||
|
||||
[GitHubActions(
|
||||
name: "release-maa-resource",
|
||||
image: GitHubActionsImage.WindowsLatest,
|
||||
OnPushBranches = new[] { MasterBranch },
|
||||
OnPushIncludePaths = new[]
|
||||
{
|
||||
"resource/**",
|
||||
"3rdparty/resource/**"
|
||||
},
|
||||
InvokedTargets = new[] { nameof(ReleaseMaaResource) },
|
||||
ImportSecrets = new[] { "PUBLISH_GH_PAT" },
|
||||
EnableGitHubToken = true,
|
||||
PublishArtifacts = true
|
||||
)]
|
||||
public partial class Build { }
|
||||
@@ -1,7 +1,7 @@
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.IO.Compression;
|
||||
using System.Text.Json;
|
||||
using System.Linq;
|
||||
using MaaBuilder.Models;
|
||||
using Microsoft.Extensions.FileSystemGlobbing;
|
||||
using Nuke.Common;
|
||||
@@ -29,30 +29,23 @@ public partial class Build
|
||||
ZipFile.CreateFromDirectory(input, bundle, CompressionLevel.SmallestSize, false);
|
||||
}
|
||||
|
||||
static void RemoveIgnoredFiles(AbsolutePath baseDirectory, IEnumerable<string> ignorePattern)
|
||||
static void MoveGlobFiles(AbsolutePath source, AbsolutePath target, IEnumerable<string> include, IEnumerable<string> exclude)
|
||||
{
|
||||
var match = new Matcher();
|
||||
var iMatch = new Matcher();
|
||||
var eMatch = new Matcher();
|
||||
|
||||
// 这里反过来可以获取到需要排除的文件列表,而不是需要保留的文件列表
|
||||
match.AddIncludePatterns(ignorePattern);
|
||||
iMatch.AddIncludePatterns(include);
|
||||
eMatch.AddIncludePatterns(exclude);
|
||||
|
||||
var includeFiles = iMatch.GetResultsInFullPath(source).ToList();
|
||||
var excludeFiles = eMatch.GetResultsInFullPath(source).ToList();
|
||||
|
||||
includeFiles.RemoveAll(x => excludeFiles.Contains(x));
|
||||
|
||||
var ignoredFiles = match.GetResultsInFullPath(baseDirectory);
|
||||
foreach (var f in ignoredFiles)
|
||||
{
|
||||
FileSystemTasks.DeleteFile(f);
|
||||
}
|
||||
}
|
||||
|
||||
static void CopyIncludeFiles(AbsolutePath originalDirectory, AbsolutePath targetDirectory, IEnumerable<string> includePattern)
|
||||
{
|
||||
var match = new Matcher();
|
||||
match.AddIncludePatterns(includePattern);
|
||||
var includeFiles = match.GetResultsInFullPath(originalDirectory);
|
||||
|
||||
foreach (var file in includeFiles)
|
||||
{
|
||||
var relative = file.Replace(originalDirectory, string.Empty);
|
||||
var targetPath = targetDirectory / relative;
|
||||
var relative = file.Replace(source, string.Empty);
|
||||
var targetPath = target / relative;
|
||||
|
||||
FileSystemTasks.CopyFile(file, targetPath, FileExistsPolicy.Overwrite);
|
||||
}
|
||||
@@ -68,63 +61,23 @@ public partial class Build
|
||||
}
|
||||
}
|
||||
|
||||
static T GetPackageBundlerConfiguration<T>(Package package) where T : class, IPackageConfiguration
|
||||
void BundleMaaBundle(AbsolutePath buildOutput, string bundleName, Package package)
|
||||
{
|
||||
var configString = package.Configuration["configuration"].ToString().NotNull();
|
||||
var config = JsonSerializer.Deserialize<T>(configString).NotNull();
|
||||
return config;
|
||||
}
|
||||
|
||||
void BundleMaaBundle(AbsolutePath buildOutput, string bundleName)
|
||||
{
|
||||
BundlePackage(buildOutput, bundleName);
|
||||
}
|
||||
|
||||
void BundleMaaBundleOta(AbsolutePath buildOutput, string bundleName, Package package)
|
||||
{
|
||||
var context = Parameters.BuildOutput / package.PackageType.ToString();
|
||||
FileSystemTasks.CopyDirectoryRecursively(buildOutput, context, DirectoryExistsPolicy.Merge);
|
||||
|
||||
var config = GetPackageBundlerConfiguration<PackageMaaBundleOta>(package);
|
||||
|
||||
RemoveIgnoredFiles(context, config.Exclude);
|
||||
BundlePackage(context, bundleName);
|
||||
}
|
||||
|
||||
void BundleMaaCore(AbsolutePath buildOutput, string bundleName, Package package)
|
||||
{
|
||||
var context = Parameters.BuildOutput / package.PackageType.ToString();
|
||||
FileSystemTasks.EnsureExistingDirectory(context);
|
||||
var tempDir = buildOutput.Parent / package.PackageType.ToString();
|
||||
FileSystemTasks.EnsureExistingDirectory(tempDir);
|
||||
|
||||
var config = GetPackageBundlerConfiguration<PackageMaaCore>(package);
|
||||
var include = package.Configuration.Include;
|
||||
var exclude = package.Configuration.Exclude;
|
||||
var noAvxBundle = package.Configuration.NoAvxBundle;
|
||||
|
||||
CopyIncludeFiles(buildOutput, context, config.Include);
|
||||
BundlePackage(context, bundleName);
|
||||
}
|
||||
MoveGlobFiles(buildOutput, tempDir, include, exclude);
|
||||
|
||||
void BundleMaaDependency(AbsolutePath buildOutput, string bundleName, Package package)
|
||||
{
|
||||
var context = Parameters.BuildOutput / package.PackageType.ToString();
|
||||
FileSystemTasks.EnsureExistingDirectory(context);
|
||||
if (string.IsNullOrEmpty(noAvxBundle) is false)
|
||||
{
|
||||
var file = RootDirectory / noAvxBundle;
|
||||
ZipFile.ExtractToDirectory(file, tempDir, true);
|
||||
}
|
||||
|
||||
var config = GetPackageBundlerConfiguration<PackageMaaDependency>(package);
|
||||
|
||||
CopyIncludeFiles(buildOutput, context, config.Include);
|
||||
BundlePackage(context, bundleName);
|
||||
}
|
||||
|
||||
void BundleMaaDependencyNoAvx(AbsolutePath buildOutput, string bundleName, Package package)
|
||||
{
|
||||
var context = Parameters.BuildOutput / package.PackageType.ToString();
|
||||
FileSystemTasks.EnsureExistingDirectory(context);
|
||||
|
||||
var config = GetPackageBundlerConfiguration<PackageMaaDependencyNoAvx>(package);
|
||||
|
||||
CopyIncludeFiles(buildOutput, context, config.Include);
|
||||
|
||||
var noAvxBundle = RootDirectory / config.NoAvxBundle;
|
||||
ZipFile.ExtractToDirectory(noAvxBundle, context, overwriteFiles: true);
|
||||
|
||||
BundlePackage(context, bundleName);
|
||||
BundlePackage(tempDir, bundleName);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -29,45 +29,14 @@ public partial class Build
|
||||
|
||||
foreach (var package in Parameters.Packages)
|
||||
{
|
||||
var type = package.PackageType;
|
||||
var name = package.NameTemplate.Replace("{VERSION}", Version);
|
||||
|
||||
switch (type)
|
||||
{
|
||||
case PackageTypes.MaaBundle:
|
||||
BundleMaaBundle(releaseBuildOutput, name);
|
||||
break;
|
||||
case PackageTypes.MaaBundleOta:
|
||||
BundleMaaBundleOta(releaseBuildOutput, name, package);
|
||||
break;
|
||||
case PackageTypes.MaaCore:
|
||||
BundleMaaCore(releaseBuildOutput, name, package);
|
||||
break;
|
||||
case PackageTypes.MaaDependency:
|
||||
BundleMaaDependency(releaseBuildOutput, name, package);
|
||||
break;
|
||||
case PackageTypes.MaaDependencyNoAvx:
|
||||
BundleMaaDependencyNoAvx(releaseBuildOutput, name, package);
|
||||
break;
|
||||
default:
|
||||
throw new ArgumentOutOfRangeException();
|
||||
}
|
||||
|
||||
BundleMaaBundle(releaseBuildOutput, name, package);
|
||||
}
|
||||
});
|
||||
|
||||
Target UseMaaResource => _ => _
|
||||
.DependsOn(WithCompileResourceRelease)
|
||||
.Triggers(SetPackageBundled)
|
||||
.Executes(() =>
|
||||
{
|
||||
var buildOutput = Parameters.BuildOutput / BuildConfiguration.Release;
|
||||
RemoveDebugSymbols(buildOutput);
|
||||
|
||||
BundlePackage(buildOutput, MaaResourcePackageName);
|
||||
});
|
||||
|
||||
Target SetPackageBundled => _ => _
|
||||
.After(UseMaaDevBundle, UseMaaResource)
|
||||
.After(UseMaaDevBundle)
|
||||
.Executes(() =>
|
||||
{
|
||||
Information("已完成打包");
|
||||
|
||||
@@ -31,23 +31,6 @@ public partial class Build
|
||||
}
|
||||
});
|
||||
|
||||
Target UseMaaResourceChangeLog => _ => _
|
||||
.Triggers(SetMaaChangeLog)
|
||||
.Executes(() =>
|
||||
{
|
||||
if (File.Exists(Parameters.MaaResourceChangeLogFile))
|
||||
{
|
||||
Information($"找到 {Parameters.MaaResourceChangeLogFile} 文件,读取内容作为更新日志");
|
||||
var text = File.ReadAllText(Parameters.MaaResourceChangeLogFile);
|
||||
ChangeLog = text;
|
||||
}
|
||||
else
|
||||
{
|
||||
Warning($"未发现 {Parameters.MaaResourceChangeLogFile} 文件,将使用默认值");
|
||||
}
|
||||
ChangeLog += $"\n\n对应 Commit:[{Parameters.MainRepo}@{Parameters.CommitHash}](https://github.com/{Parameters.MainRepo}/commit/{Parameters.CommitHashFull})";
|
||||
});
|
||||
|
||||
Target SetMaaChangeLog => _ => _
|
||||
.Executes(() =>
|
||||
{
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
using Nuke.Common;
|
||||
using Nuke.Common.IO;
|
||||
using Nuke.Common.Tooling;
|
||||
using Nuke.Common.Tools.MSBuild;
|
||||
using static Nuke.Common.Tools.MSBuild.MSBuildTasks;
|
||||
@@ -40,21 +39,4 @@ public partial class Build
|
||||
.EnableRestore()
|
||||
);
|
||||
});
|
||||
|
||||
Target WithCompileResourceRelease => _ => _
|
||||
.DependsOn(UseClean)
|
||||
.After(SetVersion)
|
||||
.Executes(() =>
|
||||
{
|
||||
var output = Parameters.BuildOutput / BuildConfiguration.Release;
|
||||
var resourceFile = RootDirectory / "resource";
|
||||
var resourceFileThirdParty = RootDirectory / "3rdparty" / "resource";
|
||||
|
||||
Information($"复制目录:{resourceFile} -> {output}");
|
||||
FileSystemTasks.CopyDirectoryRecursively(resourceFile, output,
|
||||
DirectoryExistsPolicy.Merge, FileExistsPolicy.OverwriteIfNewer);
|
||||
Information($"复制目录:{resourceFileThirdParty} -> {output}");
|
||||
FileSystemTasks.CopyDirectoryRecursively(resourceFileThirdParty, output,
|
||||
DirectoryExistsPolicy.Merge, FileExistsPolicy.OverwriteIfNewer);
|
||||
});
|
||||
}
|
||||
|
||||
@@ -22,14 +22,4 @@ public partial class Build
|
||||
.DependsOn(UseMaaChangeLog)
|
||||
.DependsOn(UsePublishArtifact)
|
||||
.DependsOn(UsePublishRelease);
|
||||
|
||||
/// <summary>
|
||||
/// 见 <see cref="ActionConfiguration.ReleaseMaaResource"/>
|
||||
/// </summary>
|
||||
Target ReleaseMaaResource => _ => _
|
||||
.DependsOn(UseCommitVersion)
|
||||
.DependsOn(UseMaaResource)
|
||||
.DependsOn(UseMaaResourceChangeLog)
|
||||
.DependsOn(UsePublishArtifact)
|
||||
.DependsOn(UsePublishRelease);
|
||||
}
|
||||
|
||||
@@ -1,3 +0,0 @@
|
||||
namespace MaaBuilder.Models;
|
||||
|
||||
public interface IPackageConfiguration { }
|
||||
@@ -1,10 +0,0 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Text.Json.Serialization;
|
||||
|
||||
namespace MaaBuilder.Models;
|
||||
|
||||
public record PackageMaaBundleOta : IPackageConfiguration
|
||||
{
|
||||
[JsonPropertyName("exclude")]
|
||||
public List<string> Exclude { get; set; }
|
||||
}
|
||||
@@ -1,10 +0,0 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Text.Json.Serialization;
|
||||
|
||||
namespace MaaBuilder.Models;
|
||||
|
||||
public record PackageMaaCore : IPackageConfiguration
|
||||
{
|
||||
[JsonPropertyName("include")]
|
||||
public List<string> Include { get; set; }
|
||||
}
|
||||
@@ -1,10 +0,0 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Text.Json.Serialization;
|
||||
|
||||
namespace MaaBuilder.Models;
|
||||
|
||||
public record PackageMaaDependency : IPackageConfiguration
|
||||
{
|
||||
[JsonPropertyName("include")]
|
||||
public List<string> Include { get; set; }
|
||||
}
|
||||
@@ -1,13 +0,0 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Text.Json.Serialization;
|
||||
|
||||
namespace MaaBuilder.Models;
|
||||
|
||||
public record PackageMaaDependencyNoAvx : IPackageConfiguration
|
||||
{
|
||||
[JsonPropertyName("include")]
|
||||
public List<string> Include { get; set; }
|
||||
|
||||
[JsonPropertyName("no_avx_bundle")]
|
||||
public string NoAvxBundle { get; set; }
|
||||
}
|
||||
@@ -1,4 +1,3 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Text.Json.Serialization;
|
||||
|
||||
namespace MaaBuilder.Models;
|
||||
@@ -12,6 +11,6 @@ public record Package
|
||||
[JsonConverter(typeof(JsonStringEnumConverter))]
|
||||
public PackageTypes PackageType { get; init; }
|
||||
|
||||
[JsonExtensionData]
|
||||
public Dictionary<string, object> Configuration { get; init; }
|
||||
[JsonPropertyName("configuration")]
|
||||
public PackageConfiguration Configuration { get; init; }
|
||||
}
|
||||
|
||||
16
tools/MaaBuilder/Models/PackageConfiguration.cs
Normal file
16
tools/MaaBuilder/Models/PackageConfiguration.cs
Normal file
@@ -0,0 +1,16 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Text.Json.Serialization;
|
||||
|
||||
namespace MaaBuilder.Models;
|
||||
|
||||
public record PackageConfiguration
|
||||
{
|
||||
[JsonPropertyName("include")]
|
||||
public IEnumerable<string> Include { get; init; } = new List<string>();
|
||||
|
||||
[JsonPropertyName("exclude")]
|
||||
public IEnumerable<string> Exclude { get; init; } = new List<string>();
|
||||
|
||||
[JsonPropertyName("no_avx_bundle")]
|
||||
public string NoAvxBundle { get; init; } = string.Empty;
|
||||
}
|
||||
@@ -6,5 +6,6 @@ public enum PackageTypes
|
||||
MaaBundleOta,
|
||||
MaaCore,
|
||||
MaaDependency,
|
||||
MaaDependencyNoAvx
|
||||
MaaDependencyNoAvx,
|
||||
MaaResource
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user