public void FromDirectoryTest() { ArchiveBuilder builder = new ArchiveBuilder(); var entries = builder.FromDirectory("archive", "/opt/demo", Array.Empty <ITaskItem>()); Assert.Equal(2, entries.Count); var readme = entries[0]; Assert.Equal("root", readme.Group); Assert.Equal(1L, readme.Inode); Assert.False(readme.IsAscii); Assert.Equal(string.Empty, readme.LinkTo); Assert.Equal(LinuxFileMode.S_IROTH | LinuxFileMode.S_IRGRP | LinuxFileMode.S_IRUSR | LinuxFileMode.S_IFREG, readme.Mode); Assert.Equal("root", readme.Owner); Assert.False(readme.RemoveOnUninstall); Assert.Equal("archive\\README.md", readme.SourceFilename); Assert.Equal("/opt/demo/README.md", readme.TargetPath); Assert.Equal("/opt/demo/README.md", readme.TargetPathWithFinalSlash); Assert.Equal(ArchiveEntryType.None, readme.Type); var script = entries[1]; Assert.Equal("root", script.Group); Assert.Equal(2L, script.Inode); Assert.False(script.IsAscii); Assert.Equal(string.Empty, script.LinkTo); Assert.Equal(LinuxFileMode.S_IROTH | LinuxFileMode.S_IRGRP | LinuxFileMode.S_IRUSR | LinuxFileMode.S_IFREG, script.Mode); Assert.Equal("root", script.Owner); Assert.False(script.RemoveOnUninstall); Assert.Equal("archive\\script.sh", script.SourceFilename); Assert.Equal("/opt/demo/script.sh", script.TargetPath); Assert.Equal("/opt/demo/script.sh", script.TargetPathWithFinalSlash); Assert.Equal(ArchiveEntryType.None, script.Type); }
public void FromDirectoryWithAppHost() { ArchiveBuilder builder = new ArchiveBuilder(); var entries = builder.FromDirectory("archive", "demo", "/opt/demo", Array.Empty <ITaskItem>()); Assert.Equal(3, entries.Count); var readme = entries[0]; Assert.Equal("root", readme.Group); Assert.Equal(1L, readme.Inode); Assert.False(readme.IsAscii); Assert.Equal(string.Empty, readme.LinkTo); Assert.Equal(LinuxFileMode.S_IROTH | LinuxFileMode.S_IRGRP | LinuxFileMode.S_IRUSR | LinuxFileMode.S_IFREG, readme.Mode); Assert.Equal("root", readme.Owner); Assert.False(readme.RemoveOnUninstall); Assert.Equal(Path.Combine("archive", "README.md"), readme.SourceFilename); Assert.Equal("/opt/demo/README.md", readme.TargetPath); Assert.Equal("/opt/demo/README.md", readme.TargetPathWithFinalSlash); Assert.Equal(ArchiveEntryType.None, readme.Type); var script = entries[1]; Assert.Equal("root", script.Group); Assert.Equal(2L, script.Inode); Assert.False(script.IsAscii); Assert.Equal(string.Empty, script.LinkTo); Assert.Equal(LinuxFileMode.S_IROTH | LinuxFileMode.S_IRGRP | LinuxFileMode.S_IRUSR | LinuxFileMode.S_IFREG, script.Mode); Assert.Equal("root", script.Owner); Assert.False(script.RemoveOnUninstall); Assert.Equal(Path.Combine("archive", "script.sh"), script.SourceFilename); Assert.Equal("/opt/demo/script.sh", script.TargetPath); Assert.Equal("/opt/demo/script.sh", script.TargetPathWithFinalSlash); Assert.Equal(ArchiveEntryType.None, script.Type); var symlink = entries[2]; Assert.Equal("root", symlink.Group); Assert.Equal(3L, symlink.Inode); Assert.False(symlink.IsAscii); Assert.Equal("/opt/demo/demo", symlink.LinkTo); Assert.Equal(LinuxFileMode.S_IXOTH | LinuxFileMode.S_IROTH | LinuxFileMode.S_IXGRP | LinuxFileMode.S_IRGRP | LinuxFileMode.S_IXUSR | LinuxFileMode.S_IWUSR | LinuxFileMode.S_IRUSR | LinuxFileMode.S_IFLNK, symlink.Mode); Assert.Equal("root", symlink.Owner); Assert.False(symlink.RemoveOnUninstall); Assert.Null(symlink.SourceFilename); Assert.Equal("/usr/local/bin/demo", symlink.TargetPath); Assert.Equal("/usr/local/bin/demo", symlink.TargetPathWithFinalSlash); Assert.Equal(ArchiveEntryType.None, symlink.Type); }
public void FromDirectoryWithMetadataTest() { ArchiveBuilder builder = new ArchiveBuilder(); Dictionary <string, string> metadata = new Dictionary <string, string>() { { "CopyToPublishDirectory", "Always" }, { "LinuxPath", "/bin/script.sh" }, { "LinuxFileMode", "755" }, }; var taskItem = new TaskItem("script.sh", metadata); var taskItems = new ITaskItem[] { taskItem }; var entries = builder.FromDirectory("archive", "/opt/demo", taskItems); Assert.Equal(2, entries.Count); var readme = entries[0]; Assert.Equal("root", readme.Group); Assert.Equal(1L, readme.Inode); Assert.False(readme.IsAscii); Assert.Equal(string.Empty, readme.LinkTo); Assert.Equal(LinuxFileMode.S_IROTH | LinuxFileMode.S_IRGRP | LinuxFileMode.S_IRUSR | LinuxFileMode.S_IFREG, readme.Mode); Assert.Equal("root", readme.Owner); Assert.False(readme.RemoveOnUninstall); Assert.Equal("archive\\README.md", readme.SourceFilename); Assert.Equal("/opt/demo/README.md", readme.TargetPath); Assert.Equal("/opt/demo/README.md", readme.TargetPathWithFinalSlash); Assert.Equal(ArchiveEntryType.None, readme.Type); var script = entries[1]; Assert.Equal("root", script.Group); Assert.Equal(2L, script.Inode); Assert.False(script.IsAscii); Assert.Equal(string.Empty, script.LinkTo); // -rwxr-xr-x Assert.Equal(LinuxFileMode.S_IXOTH | LinuxFileMode.S_IROTH | LinuxFileMode.S_IXGRP | LinuxFileMode.S_IRGRP | LinuxFileMode.S_IXUSR | LinuxFileMode.S_IWUSR | LinuxFileMode.S_IRUSR, script.Mode); Assert.Equal("root", script.Owner); Assert.False(script.RemoveOnUninstall); Assert.Equal("archive\\script.sh", script.SourceFilename); Assert.Equal("/bin/script.sh", script.TargetPath); Assert.Equal("/bin/script.sh", script.TargetPathWithFinalSlash); Assert.Equal(ArchiveEntryType.None, script.Type); }
public static void HandlerItem(bool dev, PublishDirInfo item) { var rpmPath = GetPackPath(dev, item, FileEx.RPM); //var cpioPath = GetPackPath(item, FileEx.CPIO); using var targetStream = File.Open(rpmPath, FileMode.Create, FileAccess.ReadWrite, FileShare.None); //using var cpioStream = File.Open(cpioPath, FileMode.Create, FileAccess.ReadWrite, FileShare.None); using var cpioStream = new MemoryStream(); ArchiveBuilder2 archiveBuilder2 = new() { Log = TaskLoggingHelper.Instance, }; ArchiveBuilder archiveBuilder = archiveBuilder2; var archiveEntries = archiveBuilder.FromDirectory( item.Path, Constants.HARDCODED_APP_NAME, LinuxPackConstants.Prefix, Array.Empty <ITaskItem>()); LinuxPackConstants.AddFileNameDesktop(archiveBuilder2, archiveEntries); //archiveEntries.AddRange(archiveBuilder.FromLinuxFolders(this.LinuxFolders)); archiveEntries = archiveEntries .OrderBy(e => e.TargetPathWithFinalSlash, StringComparer.Ordinal) .ToList(); CpioFileCreator cpioCreator = new CpioFileCreator(); cpioCreator.FromArchiveEntries( archiveEntries, cpioStream); cpioStream.Position = 0; // Prepare the list of dependencies List <PackageDependency> dependencies = new List <PackageDependency>(); if (item.DeploymentMode == DeploymentMode.FDE) { dependencies.Add(new PackageDependency { Name = LinuxPackConstants.aspnetcore_runtime_6_0 }); } //if (this.RpmDotNetDependencies != null) //{ // dependencies.AddRange( // this.RpmDotNetDependencies.Select( // d => GetPackageDependency(d))); //} //if (this.RpmDependencies != null) //{ // dependencies.AddRange( // this.RpmDependencies.Select( // d => GetPackageDependency(d))); //} RpmPackageCreator rpmCreator = new RpmPackageCreator(); rpmCreator.CreatePackage( archiveEntries, cpioStream, LinuxPackConstants.PackageName, Utils.GetVersion(dev), RpmTask.GetPackageArchitecture(item.Name), LinuxPackConstants.Release, LinuxPackConstants.CreateUser, LinuxPackConstants.UserName, LinuxPackConstants.InstallService, LinuxPackConstants.ServiceName, LinuxPackConstants.RpmVendor, LinuxPackConstants.Description, LinuxPackConstants.Url, LinuxPackConstants.Prefix, LinuxPackConstants.PreInstallScript, LinuxPackConstants.PostInstallScript, LinuxPackConstants.PreRemoveScript, LinuxPackConstants.PostRemoveScript, dependencies, null !, privateKey !, targetStream); }
public static void HandlerItem(bool dev, PublishDirInfo item) { var debPath = GetPackPath(dev, item, FileEx.DEB); //var debTarPath = GetPackPath(item, FileEx.DEB_TAR); var debTarXzPath = GetPackPath(dev, item, FileEx.DEB_TAR_XZ); using var targetStream = File.Open(debPath, FileMode.Create, FileAccess.ReadWrite, FileShare.None); //using var tarStream = File.Open(debTarPath, FileMode.Create, FileAccess.ReadWrite, FileShare.None); using var tarStream = new MemoryStream(); ArchiveBuilder2 archiveBuilder2 = new() { Log = TaskLoggingHelper.Instance, }; ArchiveBuilder archiveBuilder = archiveBuilder2; var archiveEntries = archiveBuilder.FromDirectory( item.Path, Constants.HARDCODED_APP_NAME, LinuxPackConstants.Prefix, Array.Empty <ITaskItem>()); LinuxPackConstants.AddFileNameDesktop(archiveBuilder2, archiveEntries); //archiveEntries.AddRange(archiveBuilder.FromLinuxFolders(this.LinuxFolders)); DebTask.EnsureDirectories(archiveEntries); archiveEntries = archiveEntries .OrderBy(e => e.TargetPathWithFinalSlash, StringComparer.Ordinal) .ToList(); TarFileCreator.FromArchiveEntries(archiveEntries, tarStream); tarStream.Position = 0; // Prepare the list of dependencies List <string> dependencies = new List <string>(); if (item.DeploymentMode == DeploymentMode.FDE) { dependencies.Add(LinuxPackConstants.aspnetcore_runtime_6_0); } //if (this.DebDependencies != null) //{ // var debDependencies = this.DebDependencies.Select(d => d.ItemSpec).ToArray(); // dependencies.AddRange(debDependencies); //} //if (this.DebDotNetDependencies != null) //{ // var debDotNetDependencies = this.DebDotNetDependencies.Select(d => d.ItemSpec).ToArray(); // dependencies.AddRange(debDotNetDependencies); //} // Prepare the list of recommended dependencies List <string> recommends = new List <string>(); //if (this.DebRecommends != null) //{ // recommends.AddRange(this.DebRecommends.Select(d => d.ItemSpec)); //} // XZOutputStream class has low quality (doesn't even know it's current position, // needs to be disposed to finish compression, etc), // So we are doing compression in a separate step using (var tarXzStream = File.Open(debTarXzPath, FileMode.Create, FileAccess.ReadWrite, FileShare.None)) using (var xzStream = new XZOutputStream(tarXzStream, XZOutputStream.DefaultThreads, XZOutputStream.DefaultPreset, true)) { tarStream.CopyTo(xzStream); } using (var tarXzStream = File.Open(debTarXzPath, FileMode.Open, FileAccess.Read, FileShare.None)) { var pkg = DebPackageCreator.BuildDebPackage( archiveEntries, LinuxPackConstants.PackageName, LinuxPackConstants.Description, LinuxPackConstants.DebMaintainer, Utils.GetVersion(dev), DebTask.GetPackageArchitecture(item.Name), LinuxPackConstants.CreateUser, LinuxPackConstants.UserName, LinuxPackConstants.InstallService, LinuxPackConstants.ServiceName, LinuxPackConstants.Prefix, //LinuxPackConstants.DebSection, "utils", LinuxPackConstants.DebPriority, LinuxPackConstants.DebHomepage, LinuxPackConstants.PreInstallScript, LinuxPackConstants.PostInstallScript, LinuxPackConstants.PreRemoveScript, LinuxPackConstants.PostRemoveScript, dependencies, recommends, null !); DebPackageCreator.WriteDebPackage( archiveEntries, tarXzStream, targetStream, pkg); } File.Delete(debTarXzPath); }