protected override void OnRun() { var pkg = new RantPackage(); var paths = CmdLine.GetPaths(); bool compress = !CmdLine.Flag("no-compress"); Console.WriteLine("Packing..."); string contentDir = Path.GetFullPath(paths.Length == 0 ? Environment.CurrentDirectory : paths[0]); Pack(pkg, contentDir); string outputPath; string infoPath = Path.Combine(contentDir, "rantpkg.json"); if (!File.Exists(infoPath)) { throw new FileNotFoundException("rantpkg.json missing from root directory."); } var info = JsonConvert.DeserializeObject <PackInfo>(File.ReadAllText(infoPath)); pkg.Title = info.Title; pkg.Authors = info.Authors; pkg.Version = RantPackageVersion.Parse(!string.IsNullOrWhiteSpace(CmdLine.Property("version")) ? CmdLine.Property("version") : info.Version); pkg.Description = info.Description; pkg.ID = info.ID; pkg.Tags = info.Tags; foreach (var dep in info.Dependencies) { pkg.AddDependency(dep); } // -out property overrides rantpkg.json's output path if (!string.IsNullOrWhiteSpace(CmdLine.Property("out"))) { outputPath = Path.Combine(CmdLine.Property("out"), $"{pkg.ID}-{pkg.Version}.rantpkg"); Directory.CreateDirectory(CmdLine.Property("out")); } // Otherwise, use rantpkg.json's "out" property else if (!string.IsNullOrWhiteSpace(info.OutputPath)) { outputPath = Path.Combine(contentDir, info.OutputPath, $"{pkg.ID}-{pkg.Version}.rantpkg"); Directory.CreateDirectory(Path.GetDirectoryName(outputPath)); } // If it doesn't have one, put it in the package content directory else { outputPath = Path.Combine(Directory.GetParent(contentDir).FullName, $"{pkg.ID}-{pkg.Version}.rantpkg"); } Console.WriteLine($"Compression: {(compress ? "yes" : "no")}"); Console.WriteLine(compress ? "Compressing and saving..." : "Saving..."); pkg.Save(outputPath, compress); Console.WriteLine("\nPackage saved to " + outputPath.Replace('\\', '/')); Console.ResetColor(); }