mirror of
https://github.com/Ellpeck/GameBundle.git
synced 2024-11-14 04:59:10 +01:00
added the ability to zip content
This commit is contained in:
parent
0bd0c9febe
commit
c084765045
3 changed files with 38 additions and 12 deletions
|
@ -23,6 +23,8 @@ namespace GameBundle {
|
|||
public bool MacBundle { get; set; }
|
||||
[Option("mac-bundle-resources", Default = new[] {"Content", "*.icns"}, HelpText = "When creating an app bundle for mac, things that should go into the Resources folder rather than the MacOS folder")]
|
||||
public IEnumerable<string> MacBundleResources { get; set; }
|
||||
[Option('z', "zip", HelpText = "Store the build results in zip files instead of folders")]
|
||||
public bool Zip { get; set; }
|
||||
|
||||
[Option('e', "exclude", HelpText = "Files that should not be moved to the library folder")]
|
||||
public IEnumerable<string> ExcludedFiles { get; set; }
|
||||
|
@ -34,6 +36,8 @@ namespace GameBundle {
|
|||
public string BuildConfig { get; set; }
|
||||
[Option("lib-name", Default = "Lib", HelpText = "The name of the library folder that is created")]
|
||||
public string LibFolder { get; set; }
|
||||
[Option('n', "name-builds", HelpText = "Name the build output directories by the project's name")]
|
||||
public bool NameBuilds { get; set; }
|
||||
|
||||
}
|
||||
}
|
|
@ -2,6 +2,7 @@
|
|||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.IO;
|
||||
using System.IO.Compression;
|
||||
using System.Linq;
|
||||
using System.Text.RegularExpressions;
|
||||
using CommandLine;
|
||||
|
@ -25,37 +26,40 @@ namespace GameBundle {
|
|||
}
|
||||
Console.WriteLine("Bundling project " + proj.FullName);
|
||||
|
||||
var bundleDir = new DirectoryInfo(options.OutputDirectory);
|
||||
if (!bundleDir.Exists)
|
||||
bundleDir.Create();
|
||||
|
||||
var builtAnything = false;
|
||||
if (options.BuildWindows) {
|
||||
Console.WriteLine("Bundling for windows");
|
||||
var res = Publish(options, proj, $"{bundleDir.FullName}/win", options.Publish32Bit ? "win-x86" : "win-x64");
|
||||
var res = Publish(options, proj, GetBuildDir(options, proj, "win"), options.Publish32Bit ? "win-x86" : "win-x64");
|
||||
if (res != 0)
|
||||
return res;
|
||||
builtAnything = true;
|
||||
}
|
||||
if (options.BuildLinux) {
|
||||
Console.WriteLine("Bundling for linux");
|
||||
var res = Publish(options, proj, $"{bundleDir.FullName}/linux", "linux-x64");
|
||||
var res = Publish(options, proj, GetBuildDir(options, proj, "linux"), "linux-x64");
|
||||
if (res != 0)
|
||||
return res;
|
||||
builtAnything = true;
|
||||
}
|
||||
if (options.BuildMac) {
|
||||
Console.WriteLine("Bundling for mac");
|
||||
var dir = $"{bundleDir.FullName}/mac";
|
||||
var res = Publish(options, proj, dir, "osx-x64");
|
||||
var dir = GetBuildDir(options, proj, "mac");
|
||||
var res = Publish(options, proj, dir, "osx-x64", () => {
|
||||
if (options.MacBundle)
|
||||
CreateMacBundle(options, new DirectoryInfo(dir), proj.FullName);
|
||||
});
|
||||
if (res != 0)
|
||||
return res;
|
||||
if (options.MacBundle)
|
||||
CreateMacBundle(options, new DirectoryInfo(dir), proj.FullName);
|
||||
builtAnything = true;
|
||||
}
|
||||
|
||||
if (!builtAnything)
|
||||
Console.WriteLine("No build took place. Supply -w, -l or -m arguments or see available arguments using --help.");
|
||||
Console.WriteLine("Done");
|
||||
return 0;
|
||||
}
|
||||
|
||||
private static int Publish(Options options, FileInfo proj, string path, string rid) {
|
||||
private static int Publish(Options options, FileInfo proj, string path, string rid, Action additionalAction = null) {
|
||||
var publishResult = RunProcess(options, "dotnet", $"publish {proj.FullName} -o {path} -r {rid} -c {options.BuildConfig} /p:PublishTrimmed={options.Trim}");
|
||||
if (publishResult != 0)
|
||||
return publishResult;
|
||||
|
@ -71,6 +75,17 @@ namespace GameBundle {
|
|||
var beautyFile = new FileInfo(Path.Combine(path, "NetCoreBeauty"));
|
||||
if (beautyFile.Exists)
|
||||
beautyFile.Delete();
|
||||
|
||||
// Run any additional actions like creating the mac bundle
|
||||
additionalAction?.Invoke();
|
||||
|
||||
// Zip the output if required
|
||||
if (options.Zip) {
|
||||
var zipLocation = Path.Combine(Directory.GetParent(path).FullName, Path.GetFileName(path) + ".zip");
|
||||
File.Delete(zipLocation);
|
||||
ZipFile.CreateFromDirectory(path, zipLocation, CompressionLevel.Optimal, true);
|
||||
Directory.Delete(path, true);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -125,5 +140,12 @@ namespace GameBundle {
|
|||
return new Regex('(' + string.Join("|", strings.Select(s => s.Replace(".", "[.]").Replace("*", ".*").Replace("?", "."))) + ')');
|
||||
}
|
||||
|
||||
private static string GetBuildDir(Options options, FileInfo proj, string osName) {
|
||||
var dir = Path.GetFullPath(options.OutputDirectory);
|
||||
if (options.NameBuilds)
|
||||
return $"{dir}/{Path.GetFileNameWithoutExtension(proj.Name)}-{osName}";
|
||||
return $"{dir}/{osName}";
|
||||
}
|
||||
|
||||
}
|
||||
}
|
|
@ -1 +1 @@
|
|||
"../GameBundle/bin/Debug/netcoreapp3.1/GameBundle.exe" -wlmb -s Test.csproj -o bin/Bundled -v
|
||||
"../GameBundle/bin/Debug/netcoreapp3.1/GameBundle.exe" -wlm -bzn -s Test.csproj -o bin/Bundled -v
|
Loading…
Reference in a new issue