diff --git a/.github/workflows/dev-build.yml b/.github/workflows/dev-build.yml index cf7bf21311..cdaff30d71 100644 --- a/.github/workflows/dev-build.yml +++ b/.github/workflows/dev-build.yml @@ -50,7 +50,7 @@ jobs: name: windows-latest runs-on: windows-latest steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 - name: Cache .nuke/temp, ~/.nuget/packages uses: actions/cache@v2 with: diff --git a/.github/workflows/release-maa.yml b/.github/workflows/release-maa.yml index 497baee2ca..68563e702c 100644 --- a/.github/workflows/release-maa.yml +++ b/.github/workflows/release-maa.yml @@ -26,7 +26,7 @@ jobs: name: windows-latest runs-on: windows-latest steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 - name: Cache .nuke/temp, ~/.nuget/packages uses: actions/cache@v2 with: diff --git a/.nuke/build.schema.json b/.nuke/build.schema.json index 35186d1765..b7d738f7a3 100644 --- a/.nuke/build.schema.json +++ b/.nuke/build.schema.json @@ -21,6 +21,7 @@ "AppVeyor", "AzurePipelines", "Bamboo", + "Bitbucket", "Bitrise", "GitHubActions", "GitLab", diff --git a/tools/MaaBuilder/ActionConfiguration.cs b/tools/MaaBuilder/ActionConfiguration.cs index a2510ab8db..d9d5110af2 100644 --- a/tools/MaaBuilder/ActionConfiguration.cs +++ b/tools/MaaBuilder/ActionConfiguration.cs @@ -8,7 +8,6 @@ public class ActionConfiguration : Enumeration { public static readonly ActionConfiguration DevBuild = new() { Value = "dev-build" }; public static readonly ActionConfiguration ReleaseMaa = new() { Value = "release-maa" }; - public static readonly ActionConfiguration ReleaseMaaResource = new() { Value = "release-maa-resource" }; public static implicit operator string(ActionConfiguration configuration) { @@ -19,7 +18,6 @@ public class ActionConfiguration : Enumeration { "dev-build" => DevBuild, "release-maa" => ReleaseMaa, - "release-maa-resource" => ReleaseMaaResource, _ => null }; } diff --git a/tools/MaaBuilder/Build.cs b/tools/MaaBuilder/Build.cs index cb312c4e00..6ae652be8d 100644 --- a/tools/MaaBuilder/Build.cs +++ b/tools/MaaBuilder/Build.cs @@ -1,17 +1,11 @@ using Nuke.Common; -using Nuke.Common.Execution; -using Nuke.Common.Git; -using Nuke.Common.IO; -using Nuke.Common.Tools.GitHub; -using Octokit; using System; -using System.Linq; +using System.Collections.Generic; using System.Runtime.InteropServices; - +using MaaBuilder.Models; namespace MaaBuilder; -[CheckBuildProjectConfigurations] public partial class Build : NukeBuild { public static int Main() @@ -40,16 +34,16 @@ public partial class Build : NukeBuild const string DevBranch = "dev"; const string MaaDevBundlePackageNameTemplate = "MaaBundle-Dev-{VERSION}"; - const string MaaResourcePackageNameTemplate = "MaaResource-{VERSION}"; string Version = ""; string ChangeLog = ""; string MaaDevBundlePackageName => MaaDevBundlePackageNameTemplate.Replace("{VERSION}", Version); - string MaaResourcePackageName => MaaResourcePackageNameTemplate.Replace("{VERSION}", Version); string LatestTag; + List ArtifactChecksums = new(); + protected override void OnBuildInitialized() { Parameters = new BuildParameters(this); diff --git a/tools/MaaBuilder/BuildConfiguration.cs b/tools/MaaBuilder/Builder/BuildConfiguration.cs similarity index 100% rename from tools/MaaBuilder/BuildConfiguration.cs rename to tools/MaaBuilder/Builder/BuildConfiguration.cs diff --git a/tools/MaaBuilder/BuildParameters.cs b/tools/MaaBuilder/Builder/BuildParameters.cs similarity index 95% rename from tools/MaaBuilder/BuildParameters.cs rename to tools/MaaBuilder/Builder/BuildParameters.cs index cbfa522335..1d1d3df75c 100644 --- a/tools/MaaBuilder/BuildParameters.cs +++ b/tools/MaaBuilder/Builder/BuildParameters.cs @@ -224,13 +224,6 @@ public partial class Build Assert.True(GhTag is not null, "ReleaseMaa -> Auto Triggered,Tag 为 Null"); Assert.True(GitHubPersonalAccessToken is not null, "ReleaseMaa -> Auto Triggered,PAT 为 Null"); } - - // 若是 ReleaseMaaResource,Branch 必须为 Master,PAT 必须存在 - if (GhActionName == ActionConfiguration.ReleaseMaaResource) - { - Assert.True(GhBranch == MasterBranch, "ReleaseMaaResource -> Auto Triggered,Branch 不为 master"); - Assert.True(GitHubPersonalAccessToken is not null, "ReleaseMaaResource -> Auto Triggered,PAT 为 Null"); - } } } } diff --git a/tools/MaaBuilder/Build.CI.GitHubActions.DevBuild.cs b/tools/MaaBuilder/Builder/CI/Build.CI.GitHubActions.DevBuild.cs similarity index 100% rename from tools/MaaBuilder/Build.CI.GitHubActions.DevBuild.cs rename to tools/MaaBuilder/Builder/CI/Build.CI.GitHubActions.DevBuild.cs diff --git a/tools/MaaBuilder/Build.CI.GitHubActions.ReleaseMaa.cs b/tools/MaaBuilder/Builder/CI/Build.CI.GitHubActions.ReleaseMaa.cs similarity index 100% rename from tools/MaaBuilder/Build.CI.GitHubActions.ReleaseMaa.cs rename to tools/MaaBuilder/Builder/CI/Build.CI.GitHubActions.ReleaseMaa.cs diff --git a/tools/MaaBuilder/Build.Helper.Bundler.cs b/tools/MaaBuilder/Builder/Helper/Build.Helper.Bundler.cs similarity index 64% rename from tools/MaaBuilder/Build.Helper.Bundler.cs rename to tools/MaaBuilder/Builder/Helper/Build.Helper.Bundler.cs index 0012ace6e0..4590603dcb 100644 --- a/tools/MaaBuilder/Build.Helper.Bundler.cs +++ b/tools/MaaBuilder/Builder/Helper/Build.Helper.Bundler.cs @@ -1,7 +1,10 @@ -using System.Collections.Generic; +using System; +using System.Collections.Generic; using System.IO; using System.IO.Compression; using System.Linq; +using System.Security.Cryptography; +using System.Text; using MaaBuilder.Models; using Microsoft.Extensions.FileSystemGlobbing; using Nuke.Common; @@ -11,7 +14,7 @@ namespace MaaBuilder; public partial class Build { - void BundlePackage(AbsolutePath input, string bundleName) + void BundlePackage(AbsolutePath input, string bundleName, string packageType) { var packName = bundleName; if (packName.EndsWith(".zip") is false) @@ -27,6 +30,29 @@ public partial class Build Information($"创建压缩文件:{bundle}"); ZipFile.CreateFromDirectory(input, bundle, CompressionLevel.SmallestSize, false); + + var sourceDirectory = new DirectoryInfo(input); + var allFiles = sourceDirectory.GetFiles("*.*", SearchOption.AllDirectories); + var allHashes = allFiles + .Select(x => FileSystemTasks.GetFileHash(x.FullName).ToUpperInvariant()) + .OrderBy(x => x); + var hashCombinedBuilder = new StringBuilder(); + foreach (var h in allHashes) + { + hashCombinedBuilder.Append(h); + } + var combinedHashString = hashCombinedBuilder.ToString(); + var hash = GetStringMd5(combinedHashString); + + var bundleHash = FileSystemTasks.GetFileHash(bundle).ToUpperInvariant(); + + ArtifactChecksums.Add(new Checksum + { + FileHash = bundleHash, + FileIdentity = hash, + FileName = packName, + PackageType = packageType + }); } static void MoveGlobFiles(AbsolutePath source, AbsolutePath target, IEnumerable include, IEnumerable exclude) @@ -78,6 +104,14 @@ public partial class Build ZipFile.ExtractToDirectory(file, tempDir, true); } - BundlePackage(tempDir, bundleName); + BundlePackage(tempDir, bundleName, package.PackageType); + } + + static string GetStringMd5(string input) + { + using var md5 = MD5.Create(); + var inputBytes = Encoding.ASCII.GetBytes(input); + var hashBytes = md5.ComputeHash(inputBytes); + return Convert.ToHexString(hashBytes); } } diff --git a/tools/MaaBuilder/Build.Helper.Github.cs b/tools/MaaBuilder/Builder/Helper/Build.Helper.Github.cs similarity index 99% rename from tools/MaaBuilder/Build.Helper.Github.cs rename to tools/MaaBuilder/Builder/Helper/Build.Helper.Github.cs index e390cd9406..d9a9e6e048 100644 --- a/tools/MaaBuilder/Build.Helper.Github.cs +++ b/tools/MaaBuilder/Builder/Helper/Build.Helper.Github.cs @@ -12,7 +12,7 @@ public partial class Build void CreateGitHubRelease(string repo, string commitish, string releaseName) { - var assets = Parameters.ArtifactOutput.GlobFiles("*.zip", "checksum.txt"); + var assets = Parameters.ArtifactOutput.GlobFiles("*.zip", "checksum.json"); var release = new NewRelease(Version) { diff --git a/tools/MaaBuilder/Build.Helper.Logger.cs b/tools/MaaBuilder/Builder/Helper/Build.Helper.Logger.cs similarity index 100% rename from tools/MaaBuilder/Build.Helper.Logger.cs rename to tools/MaaBuilder/Builder/Helper/Build.Helper.Logger.cs diff --git a/tools/MaaBuilder/Build.Job.Bundle.cs b/tools/MaaBuilder/Builder/Job/Build.Job.Bundle.cs similarity index 63% rename from tools/MaaBuilder/Build.Job.Bundle.cs rename to tools/MaaBuilder/Builder/Job/Build.Job.Bundle.cs index d84ef7d713..c5265c4bf9 100644 --- a/tools/MaaBuilder/Build.Job.Bundle.cs +++ b/tools/MaaBuilder/Builder/Job/Build.Job.Bundle.cs @@ -1,10 +1,7 @@ -using System; -using System.Collections.Generic; -using System.IO; +using System.IO; using System.Text; -using MaaBuilder.Models; +using System.Text.Json; using Nuke.Common; -using Nuke.Common.IO; namespace MaaBuilder; @@ -16,7 +13,7 @@ public partial class Build .Executes(() => { var buildOutput = Parameters.BuildOutput / BuildConfiguration.Release; - BundlePackage(buildOutput, MaaDevBundlePackageName); + BundlePackage(buildOutput, MaaDevBundlePackageName, "DevBundle"); }); Target UseMaaRelease => _ => _ @@ -40,18 +37,14 @@ public partial class Build .Executes(() => { Information("已完成打包"); - var checksumFile = Parameters.ArtifactOutput / "checksum.txt"; - var checksum = new List(); + var checksumFile = Parameters.ArtifactOutput / "checksum.json"; - foreach (var file in Parameters.ArtifactOutput.GlobFiles("*.zip")) + foreach (var chs in ArtifactChecksums) { - var size = (new FileInfo(file).Length / 1024.0 / 1024.0).ToString("F3"); - var hash = FileSystemTasks.GetFileHash(file); - Information($"找到 Artifact ({hash}):{file} ({size} MB)"); - - checksum.Add($"{file.Name}:{hash}"); + Information($"Artifact:{chs}"); } - - File.WriteAllLines(checksumFile, checksum, Encoding.UTF8); + + var str = JsonSerializer.Serialize(ArtifactChecksums); + File.WriteAllText(checksumFile, str, Encoding.UTF8); }); } diff --git a/tools/MaaBuilder/Build.Job.Changelog.cs b/tools/MaaBuilder/Builder/Job/Build.Job.Changelog.cs similarity index 100% rename from tools/MaaBuilder/Build.Job.Changelog.cs rename to tools/MaaBuilder/Builder/Job/Build.Job.Changelog.cs diff --git a/tools/MaaBuilder/Build.Job.Clean.cs b/tools/MaaBuilder/Builder/Job/Build.Job.Clean.cs similarity index 100% rename from tools/MaaBuilder/Build.Job.Clean.cs rename to tools/MaaBuilder/Builder/Job/Build.Job.Clean.cs diff --git a/tools/MaaBuilder/Build.Job.Compile.cs b/tools/MaaBuilder/Builder/Job/Build.Job.Compile.cs similarity index 100% rename from tools/MaaBuilder/Build.Job.Compile.cs rename to tools/MaaBuilder/Builder/Job/Build.Job.Compile.cs diff --git a/tools/MaaBuilder/Build.Job.Publish.cs b/tools/MaaBuilder/Builder/Job/Build.Job.Publish.cs similarity index 89% rename from tools/MaaBuilder/Build.Job.Publish.cs rename to tools/MaaBuilder/Builder/Job/Build.Job.Publish.cs index dd34619885..22c14c5b81 100644 --- a/tools/MaaBuilder/Build.Job.Publish.cs +++ b/tools/MaaBuilder/Builder/Job/Build.Job.Publish.cs @@ -8,7 +8,7 @@ public partial class Build { Target UsePublishArtifact => _ => _ .After(SetPackageBundled, SetMaaChangeLog) - .Produces(RootDirectory / "artifacts" / "*.zip") + .Produces(RootDirectory / "artifacts" / "*.*") .OnlyWhenStatic(() => GitHubActions != null); Target UsePublishRelease => _ => _ @@ -21,7 +21,7 @@ public partial class Build if (Parameters.GhActionName == ActionConfiguration.DevBuild) { - Information($"DevBuild 跳过发布 Release"); + Information("DevBuild 跳过发布 Release"); return; } @@ -36,8 +36,6 @@ public partial class Build Information($"运行 ReleaseMaa 将在 {Parameters.MainRepo} 创建 Release {Parameters.GhTag}"); CreateGitHubRelease(Parameters.MainRepo, Parameters.CommitHashFull, Version); - - return; } }); } diff --git a/tools/MaaBuilder/Build.Job.Version.cs b/tools/MaaBuilder/Builder/Job/Build.Job.Version.cs similarity index 100% rename from tools/MaaBuilder/Build.Job.Version.cs rename to tools/MaaBuilder/Builder/Job/Build.Job.Version.cs diff --git a/tools/MaaBuilder/Build.Job.Workflow.cs b/tools/MaaBuilder/Builder/Job/Build.Job.Workflow.cs similarity index 100% rename from tools/MaaBuilder/Build.Job.Workflow.cs rename to tools/MaaBuilder/Builder/Job/Build.Job.Workflow.cs diff --git a/tools/MaaBuilder/MaaBuilder.csproj b/tools/MaaBuilder/MaaBuilder.csproj index 37207c6d95..64d49d0158 100644 --- a/tools/MaaBuilder/MaaBuilder.csproj +++ b/tools/MaaBuilder/MaaBuilder.csproj @@ -11,7 +11,7 @@ - + diff --git a/tools/MaaBuilder/MaaBuilder.csproj.DotSettings b/tools/MaaBuilder/MaaBuilder.csproj.DotSettings index 7bc28484c4..b9d26d2bab 100644 --- a/tools/MaaBuilder/MaaBuilder.csproj.DotSettings +++ b/tools/MaaBuilder/MaaBuilder.csproj.DotSettings @@ -3,6 +3,10 @@ DO_NOT_SHOW DO_NOT_SHOW DO_NOT_SHOW + True + True + True + True Implicit Implicit ExpressionBody diff --git a/tools/MaaBuilder/Models/Checksum.cs b/tools/MaaBuilder/Models/Checksum.cs new file mode 100644 index 0000000000..3b4e37adcb --- /dev/null +++ b/tools/MaaBuilder/Models/Checksum.cs @@ -0,0 +1,18 @@ +using System.Text.Json.Serialization; + +namespace MaaBuilder.Models; + +public record Checksum +{ + [JsonPropertyName("file_name")] + public string FileName { get; set; } + + [JsonPropertyName("package_type")] + public string PackageType { get; set; } + + [JsonPropertyName("file_hash")] + public string FileHash { get; set; } + + [JsonPropertyName("file_identity")] + public string FileIdentity { get; set; } +}