diff --git a/.gitignore b/.gitignore
index b5469cab..68f1105f 100644
--- a/.gitignore
+++ b/.gitignore
@@ -5,3 +5,9 @@ obj/
.vs/
.idea/
.vagrant/
+*.deb
+*.rpm
+*.msi
+*.pkg
+*.zip
+*.tar.gz
diff --git a/.travis.yml b/.travis.yml
new file mode 100644
index 00000000..f50f3d5c
--- /dev/null
+++ b/.travis.yml
@@ -0,0 +1,35 @@
+language: csharp
+mono: none
+dotnet: 2.1.400
+
+env:
+ - RUNTIME=centos.7-x64
+ - RUNTIME=ol.7-x64
+ - RUNTIME=fedora.27-x64
+ - RUNTIME=fedora.28-x64
+ - RUNTIME=debian.8-x64
+ - RUNTIME=debian.9-x64
+ - RUNTIME=ubuntu.14.04-x64
+ - RUNTIME=ubuntu.16.04-x64
+ - RUNTIME=ubuntu.18.04-x64
+ - RUNTIME=opensuse.42.3-x64
+
+sudo: required
+
+git:
+ depth: false
+
+script:
+ - dotnet restore dotnet-packaging.sln
+ - dotnet pack dotnet-packaging.sln -c Release
+ - dotnet test Packaging.Targets.Tests/Packaging.Targets.Tests.csproj
+
+ - cd $TRAVIS_BUILD_DIR/demo/aspnetcore
+ - dotnet restore
+ - if [ "$RUNTIME" = "rhel.7-x64" ]; then dotnet rpm -c Release -r rhel.7-x64 -f netcoreapp2.0; fi
+ - if [ "$RUNTIME" = "ubuntu.16.04-x64" ]; then dotnet deb -c Release -r ubuntu.16.04-x64 -f netcoreapp2.0; fi
+
+ - cd $TRAVIS_BUILD_DIR/demo/cliscd/
+ - dotnet restore
+
+ - ./run-tests.sh -r $RUNTIME
\ No newline at end of file
diff --git a/.vscode/launch.json b/.vscode/launch.json
new file mode 100644
index 00000000..c3a19234
--- /dev/null
+++ b/.vscode/launch.json
@@ -0,0 +1,28 @@
+{
+ // Use IntelliSense to find out which attributes exist for C# debugging
+ // Use hover for the description of the existing attributes
+ // For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md
+ "version": "0.2.0",
+ "configurations": [
+ {
+ "name": ".NET Core Launch (console)",
+ "type": "coreclr",
+ "request": "launch",
+ "preLaunchTask": "build",
+ // If you have changed target frameworks, make sure to update the program path.
+ "program": "${workspaceFolder}/dotnet-deb/bin/Debug/netcoreapp1.0/dotnet-deb.dll",
+ "args": [],
+ "cwd": "${workspaceFolder}/dotnet-deb",
+ // For more information about the 'console' field, see https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md#console-terminal-window
+ "console": "internalConsole",
+ "stopAtEntry": false,
+ "internalConsoleOptions": "openOnSessionStart"
+ },
+ {
+ "name": ".NET Core Attach",
+ "type": "coreclr",
+ "request": "attach",
+ "processId": "${command:pickProcess}"
+ }
+ ,]
+}
\ No newline at end of file
diff --git a/.vscode/tasks.json b/.vscode/tasks.json
new file mode 100644
index 00000000..bca61a0f
--- /dev/null
+++ b/.vscode/tasks.json
@@ -0,0 +1,15 @@
+{
+ "version": "2.0.0",
+ "tasks": [
+ {
+ "label": "build",
+ "command": "dotnet",
+ "type": "process",
+ "args": [
+ "build",
+ "${workspaceFolder}/dotnet-deb/dotnet-deb.csproj"
+ ],
+ "problemMatcher": "$msCompile"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/Packaging.Targets.Tests/ArchiveBuilderTests.cs b/Packaging.Targets.Tests/ArchiveBuilderTests.cs
index 152e5860..05c56956 100644
--- a/Packaging.Targets.Tests/ArchiveBuilderTests.cs
+++ b/Packaging.Targets.Tests/ArchiveBuilderTests.cs
@@ -3,6 +3,7 @@
using Packaging.Targets.IO;
using System;
using System.Collections.Generic;
+using System.IO;
using Xunit;
namespace Packaging.Targets.Tests
@@ -31,7 +32,7 @@ public void FromDirectoryTest()
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(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);
@@ -44,7 +45,7 @@ public void FromDirectoryTest()
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(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);
@@ -79,7 +80,7 @@ public void FromDirectoryWithMetadataTest()
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(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);
@@ -94,7 +95,7 @@ public void FromDirectoryWithMetadataTest()
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(Path.Combine("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);
diff --git a/Packaging.Targets.Tests/Rpm/RpmMetadataTests.cs b/Packaging.Targets.Tests/Rpm/RpmMetadataTests.cs
index b76eab4a..cb39b88e 100644
--- a/Packaging.Targets.Tests/Rpm/RpmMetadataTests.cs
+++ b/Packaging.Targets.Tests/Rpm/RpmMetadataTests.cs
@@ -117,7 +117,7 @@ public void SetFilesTest()
{
ArchiveBuilder builder = new ArchiveBuilder(new PlistFileAnalyzer());
RpmPackageCreator creator = new RpmPackageCreator(new PlistFileAnalyzer());
- var entries = builder.FromCpio(cpio);
+ var entries = builder.FromCpio(originalPackage, cpio);
var files = creator.CreateFiles(entries);
var metadata = new PublicRpmMetadata(package);
@@ -186,7 +186,7 @@ public void CreatePackageMetadata()
{
ArchiveBuilder builder = new ArchiveBuilder(new PlistFileAnalyzer());
RpmPackageCreator creator = new RpmPackageCreator(new PlistFileAnalyzer());
- var entries = builder.FromCpio(cpio);
+ var entries = builder.FromCpio(originalPackage, cpio);
var files = creator.CreateFiles(entries);
// Core routine to populate files and dependencies
diff --git a/Packaging.Targets.Tests/Rpm/RpmPackageCreatorTests.cs b/Packaging.Targets.Tests/Rpm/RpmPackageCreatorTests.cs
index 738d8bd0..7871bdc4 100644
--- a/Packaging.Targets.Tests/Rpm/RpmPackageCreatorTests.cs
+++ b/Packaging.Targets.Tests/Rpm/RpmPackageCreatorTests.cs
@@ -46,7 +46,7 @@ public void CreateFiles(string rpm, string analyzerName)
RpmPackageCreator creator = new RpmPackageCreator(analyzer);
ArchiveBuilder builder = new ArchiveBuilder(analyzer);
- var entries = builder.FromCpio(cpio);
+ var entries = builder.FromCpio(originalPackage, cpio);
var files = creator.CreateFiles(entries);
var originalMetadata = new RpmMetadata(originalPackage);
@@ -98,7 +98,7 @@ public void CalculateOffsetTest()
{
ArchiveBuilder builder = new ArchiveBuilder(new PlistFileAnalyzer());
RpmPackageCreator creator = new RpmPackageCreator(new PlistFileAnalyzer());
- var entries = builder.FromCpio(cpio);
+ var entries = builder.FromCpio(originalPackage, cpio);
var files = creator.CreateFiles(entries);
// Core routine to populate files and dependencies
@@ -151,7 +151,7 @@ public void CalculateSignatureTest()
using (var cpio = new CpioFile(payloadStream, false))
{
ArchiveBuilder builder = new ArchiveBuilder(new PlistFileAnalyzer());
- var entries = builder.FromCpio(cpio);
+ var entries = builder.FromCpio(originalPackage, cpio);
files = creator.CreateFiles(entries);
}
@@ -242,8 +242,16 @@ public void CreatePackageTest()
var secretKeyRing = krgen.GenerateSecretKeyRing();
var privateKey = secretKeyRing.GetSecretKey().ExtractPrivateKey("dotnet".ToCharArray());
var publicKey = secretKeyRing.GetPublicKey();
-
- using (Stream stream = File.OpenRead(@"Rpm/libplist-2.0.1.151-1.1.x86_64.rpm"))
+ const string preInstScript = "echo preinst\n";
+ const string postInstScript = "echo postinst\n";
+ const string preRemoveScript = "echo preremove\n";
+ const string postRemoveScript = "echo postremove\n";
+ const string nameString = "libplist";
+ const string versionString = "2.0.1.151";
+ const string releaseString = "1.1";
+ const string archString = "x86_64";
+
+ using (Stream stream = File.OpenRead($"Rpm/{nameString}-{versionString}-{releaseString}.{archString}.rpm"))
using (var targetStream = File.Open(@"RpmPackageCreatorTests_CreateTest.rpm", FileMode.Create, FileAccess.ReadWrite, FileShare.None))
{
var originalPackage = RpmPackageReader.Read(stream);
@@ -253,7 +261,7 @@ public void CreatePackageTest()
using (CpioFile cpio = new CpioFile(decompressedPayloadStream, leaveOpen: false))
{
ArchiveBuilder builder = new ArchiveBuilder();
- archive = builder.FromCpio(cpio);
+ archive = builder.FromCpio(originalPackage, cpio);
}
using (var decompressedPayloadStream = RpmPayloadReader.GetDecompressedPayloadStream(originalPackage))
@@ -266,15 +274,19 @@ public void CreatePackageTest()
creator.CreatePackage(
archive,
payloadStream,
- "libplist",
- "2.0.1.151",
- "x86_64",
- "1.1",
+ nameString,
+ versionString,
+ archString,
+ releaseString,
false,
null,
false,
null,
null,
+ preInstScript,
+ postInstScript,
+ preRemoveScript,
+ postRemoveScript,
null,
(metadata) => PlistMetadata.ApplyDefaultMetadata(metadata),
privateKey,
@@ -287,6 +299,14 @@ public void CreatePackageTest()
var package = RpmPackageReader.Read(targetStream);
var metadata = new RpmMetadata(package);
+ Assert.Equal(metadata.Version, versionString);
+ Assert.Equal(metadata.Name, nameString);
+ Assert.Equal(metadata.Arch, archString);
+ Assert.Equal(metadata.Release, releaseString);
+ Assert.StartsWith(preInstScript, metadata.PreIn);
+ Assert.StartsWith(postInstScript, metadata.PostIn);
+ Assert.StartsWith(preRemoveScript, metadata.PreUn);
+ Assert.StartsWith(postRemoveScript, metadata.PostUn);
var signature = new RpmSignature(package);
Assert.True(signature.Verify(publicKey));
@@ -318,7 +338,7 @@ public void CreatePackageBinaryTest()
using (CpioFile cpio = new CpioFile(decompressedPayloadStream, leaveOpen: false))
{
ArchiveBuilder builder = new ArchiveBuilder();
- archive = builder.FromCpio(cpio);
+ archive = builder.FromCpio(originalPackage, cpio);
}
using (var compressedPayloadStream = RpmPayloadReader.GetCompressedPayloadStream(originalPackage))
@@ -337,6 +357,10 @@ public void CreatePackageBinaryTest()
null,
null,
null,
+ null,
+ null,
+ null,
+ null,
(metadata) => PlistMetadata.ApplyDefaultMetadata(metadata),
signer,
targetStream,
diff --git a/Packaging.Targets/ArchiveBuilder.cs b/Packaging.Targets/ArchiveBuilder.cs
index 381be485..93a48b6d 100644
--- a/Packaging.Targets/ArchiveBuilder.cs
+++ b/Packaging.Targets/ArchiveBuilder.cs
@@ -6,6 +6,8 @@
using System.Collections.ObjectModel;
using System.IO;
using System.Linq;
+using System.Reflection;
+using System.Runtime.Loader;
using System.Security.Cryptography;
using System.Text;
@@ -46,20 +48,23 @@ public ArchiveBuilder(IFileAnalyzer analyzer)
///
/// Extracts the objects from a CPIO file.
///
+ ///
///
- /// The CPIO file from which to extract the entries.
+ /// The CPIO file from which to extract the entries.
///
///
/// A list of objects representing the data in the CPIO file.
///
- public List FromCpio(CpioFile file)
+ public List FromCpio(RpmPackage rpmPackage, CpioFile file)
{
List value = new List();
byte[] buffer = new byte[1024];
byte[] fileHeader = null;
+ int currentEntry = -1;
while (file.Read())
{
+ currentEntry++;
fileHeader = null;
ArchiveEntry entry = new ArchiveEntry()
@@ -75,9 +80,40 @@ public List FromCpio(CpioFile file)
LinkTo = string.Empty,
Sha256 = Array.Empty(),
SourceFilename = null,
- IsAscii = true
+ IsAscii = true,
+
};
+
+ var fileColor = (RpmFileColor)(rpmPackage.Header.Records[IndexTag.RPMTAG_FILECOLORS]?.Value as Collection)?[currentEntry];
+ var fileFlag = (RpmFileFlags)(rpmPackage.Header.Records[IndexTag.RPMTAG_FILEFLAGS]?.Value as Collection)?[currentEntry];
+ var fileClassIndex = (int)(rpmPackage.Header.Records[IndexTag.RPMTAG_FILECLASS]?.Value as Collection)?[currentEntry];
+ var fileClass = (rpmPackage.Header.Records[IndexTag.RPMTAG_CLASSDICT]?.Value as Collection)?[fileClassIndex];
+
+ entry.Group = (rpmPackage.Header.Records[IndexTag.RPMTAG_FILEGROUPNAME]?.Value as Collection)?[currentEntry];
+ entry.Owner = (rpmPackage.Header.Records[IndexTag.RPMTAG_FILEUSERNAME]?.Value as Collection)?[currentEntry];
+ entry.LinkTo = (rpmPackage.Header.Records[IndexTag.RPMTAG_FILELINKTOS]?.Value as Collection)?[currentEntry];
+
+ if ((fileFlag & RpmFileFlags.RPMFILE_DOC) == RpmFileFlags.RPMFILE_DOC)
+ {
+ entry.Type = ArchiveEntryType.Doc;
+ }
+
+ if ((fileColor & RpmFileColor.RPMFC_ELF32) == RpmFileColor.RPMFC_ELF32)
+ {
+ entry.Type = ArchiveEntryType.Executable32;
+ }
+
+ if ((fileColor & RpmFileColor.RPMFC_ELF64) == RpmFileColor.RPMFC_ELF64)
+ {
+ entry.Type = ArchiveEntryType.Executable64;
+ }
+
+ if (fileClass.Contains("mono"))
+ {
+ entry.Type = ArchiveEntryType.NetAssembly;
+ }
+
if (entry.Mode.HasFlag(LinuxFileMode.S_IFREG) && !entry.Mode.HasFlag(LinuxFileMode.S_IFLNK))
{
using (var fileStream = file.Open())
@@ -106,8 +142,6 @@ public List FromCpio(CpioFile file)
entry.Sha256 = hasher.GetHashAndReset();
}
-
- entry.Type = this.GetArchiveEntryType(fileHeader);
}
else if (entry.Mode.HasFlag(LinuxFileMode.S_IFLNK))
{
@@ -277,25 +311,58 @@ protected void AddFile(string entry, string relativePath, string prefix, List
/// The file is a 64-bit executable.
///
- Executable64 = 2
+ Executable64 = 2,
+
+ ///
+ /// The file is a module (like a .NET assembly)
+ ///
+ NetAssembly = 3,
+
+ ///
+ /// This file is a documentation entry
+ ///
+ Doc = 4
}
}
diff --git a/Packaging.Targets/Packaging.Targets.csproj b/Packaging.Targets/Packaging.Targets.csproj
index f60f0068..f3372717 100644
--- a/Packaging.Targets/Packaging.Targets.csproj
+++ b/Packaging.Targets/Packaging.Targets.csproj
@@ -2,7 +2,6 @@
netstandard1.5;netstandard2.0
0.1.1
- $(USERPROFILE)\.nuget\packages
Frederik Carlier
Quamotion
Packaging Tools for .NET CLI
@@ -50,6 +49,10 @@
all
+
+ all
+
+
@@ -62,21 +65,21 @@
-
+
true
tools\netstandard1.5\
-
+
true
tools\netstandard2.0\
-
+
true
tools\netstandard1.5\
-
+
true
tools\netstandard2.0\
@@ -98,4 +101,20 @@
-
\ No newline at end of file
+
+
+
+ <!-- This file is auto-generated. Do not edit manually -->
+ <Project>
+ <PropertyGroup>
+ <PackagingNuGetVersion>$(NuGetPackageVersion)</PackagingNuGetVersion>
+ </PropertyGroup>
+ </Project>
+
+
+
+
+
diff --git a/Packaging.Targets/Rpm/FileAnalyzer.cs b/Packaging.Targets/Rpm/FileAnalyzer.cs
index e08ff5e2..04169e85 100644
--- a/Packaging.Targets/Rpm/FileAnalyzer.cs
+++ b/Packaging.Targets/Rpm/FileAnalyzer.cs
@@ -33,19 +33,7 @@ public virtual Collection DetermineProvides(ArchiveEntry entr
///
public virtual RpmFileFlags DetermineFlags(ArchiveEntry entry)
{
- // The only custom flags which are supported for now are the RPMFILE_DOC flags for non-executable
- // files.
- if (entry.Mode.HasFlag(LinuxFileMode.S_IFDIR))
- {
- return RpmFileFlags.None;
- }
- else if (entry.Mode.HasFlag(LinuxFileMode.S_IFLNK))
- {
- return RpmFileFlags.None;
- }
- else if (!entry.Mode.HasFlag(LinuxFileMode.S_IXGRP)
- && !entry.Mode.HasFlag(LinuxFileMode.S_IXOTH)
- && !entry.Mode.HasFlag(LinuxFileMode.S_IXUSR))
+ if (entry.Type == ArchiveEntryType.Doc)
{
return RpmFileFlags.RPMFILE_DOC;
}
@@ -67,6 +55,9 @@ public virtual RpmFileColor DetermineColor(ArchiveEntry entry)
case ArchiveEntryType.Executable64:
return RpmFileColor.RPMFC_ELF64;
+ case ArchiveEntryType.NetAssembly:
+ return RpmFileColor.RPMFC_INCLUDE;
+
default:
return RpmFileColor.RPMFC_BLACK;
}
@@ -92,6 +83,11 @@ public virtual string DetermineClass(ArchiveEntry entry)
return string.Empty;
}
+ if (entry.Type == ArchiveEntryType.NetAssembly)
+ {
+ return "mono";
+ }
+
if (entry.TargetPath.EndsWith(".svg"))
{
return "SVG Scalable Vector Graphics image";
diff --git a/Packaging.Targets/Rpm/RpmFileColor.cs b/Packaging.Targets/Rpm/RpmFileColor.cs
index f81dbdff..a4ac3e9a 100644
--- a/Packaging.Targets/Rpm/RpmFileColor.cs
+++ b/Packaging.Targets/Rpm/RpmFileColor.cs
@@ -2,41 +2,21 @@
namespace Packaging.Targets.Rpm
{
+ /*
+ * from https://github.com/rpm-software-management/rpm/blob/master/build/rpmfc.h
+ */
+
///
/// Determines the type of the file.
///
[Flags]
- internal enum RpmFileColor
+ internal enum RpmFileColor : int
{
RPMFC_BLACK = 0,
RPMFC_ELF32 = 1 << 0,
RPMFC_ELF64 = 1 << 1,
RPMFC_ELFMIPSN32 = 1 << 2,
- RPMFC_PKGCONFIG = 1 << 4,
- RPMFC_LIBTOOL = 1 << 5,
- RPMFC_BOURNE = 1 << 6,
- RPMFC_MODULE = 1 << 7,
- RPMFC_EXECUTABLE = 1 << 8,
- RPMFC_SCRIPT = 1 << 9,
- RPMFC_TEXT = 1 << 10,
- RPMFC_DATA = 1 << 11,
- RPMFC_DOCUMENT = 1 << 12,
- RPMFC_STATIC = 1 << 13,
- RPMFC_NOTSTRIPPED = 1 << 14,
- RPMFC_COMPRESSED = 1 << 15,
- RPMFC_DIRECTORY = 1 << 16,
- RPMFC_SYMLINK = 1 << 17,
- RPMFC_DEVICE = 1 << 18,
- RPMFC_LIBRARY = 1 << 19,
- RPMFC_ARCHIVE = 1 << 20,
- RPMFC_FONT = 1 << 21,
- RPMFC_IMAGE = 1 << 22,
- RPMFC_MANPAGE = 1 << 23,
- RPMFC_PERL = 1 << 24,
- RPMFC_JAVA = 1 << 25,
- RPMFC_PYTHON = 1 << 26,
- RPMFC_PHP = 1 << 27,
- RPMFC_TCL = 1 << 28,
+ RPMFC_ELF = RPMFC_ELF32 | RPMFC_ELF64 | RPMFC_ELFMIPSN32,
RPMFC_WHITE = 1 << 29,
RPMFC_INCLUDE = 1 << 30,
RPMFC_ERROR = 1 << 31
diff --git a/Packaging.Targets/Rpm/RpmPackageCreator.cs b/Packaging.Targets/Rpm/RpmPackageCreator.cs
index 93255fff..49e97c3b 100644
--- a/Packaging.Targets/Rpm/RpmPackageCreator.cs
+++ b/Packaging.Targets/Rpm/RpmPackageCreator.cs
@@ -84,6 +84,18 @@ public RpmPackageCreator(IFileAnalyzer analyzer)
///
/// A prefix to use.
///
+ ///
+ /// Pre-Install script
+ ///
+ ///
+ /// Post-Install script
+ ///
+ ///
+ /// Pre-Remove script
+ ///
+ ///
+ /// Post-Remove script
+ ///
///
/// Additional dependencies to add to the RPM package.
///
@@ -108,6 +120,10 @@ public void CreatePackage(
bool installService,
string serviceName,
string prefix,
+ string preInstallScript,
+ string postInstallScript,
+ string preRemoveScript,
+ string postRemoveScript,
IEnumerable additionalDependencies,
Action additionalMetadata,
PgpPrivateKey privateKey,
@@ -125,6 +141,10 @@ public void CreatePackage(
installService,
serviceName,
prefix,
+ preInstallScript,
+ postInstallScript,
+ preRemoveScript,
+ postRemoveScript,
additionalDependencies,
additionalMetadata,
new PackageSigner(privateKey),
@@ -167,6 +187,18 @@ public void CreatePackage(
///
/// A prefix to use.
///
+ ///
+ /// Pre-Install script
+ ///
+ ///
+ /// Post-Install script
+ ///
+ ///
+ /// Pre-Remove script
+ ///
+ ///
+ /// Post-Remove script
+ ///
///
/// Additional dependencies to add to the RPM package.
///
@@ -201,6 +233,10 @@ public void CreatePackage(
bool installService,
string serviceName,
string prefix,
+ string preInstallScript,
+ string postInstallScript,
+ string preRemoveScript,
+ string postRemoveScript,
IEnumerable additionalDependencies,
Action additionalMetadata,
IPackageSigner signer,
@@ -255,10 +291,10 @@ public void CreatePackage(
metadata.SourceRpm = $"{name}-{version}-{release}.src.rpm";
// Scripts which run before & after installation and removal.
- var preIn = string.Empty;
- var postIn = string.Empty;
- var preUn = string.Empty;
- var postUn = string.Empty;
+ var preIn = preInstallScript ?? string.Empty;
+ var postIn = postInstallScript ?? string.Empty;
+ var preUn = preRemoveScript ?? string.Empty;
+ var postUn = postRemoveScript ?? string.Empty;
if (createUser)
{
diff --git a/Packaging.Targets/RpmTask.cs b/Packaging.Targets/RpmTask.cs
index 6928d917..391fe9f9 100644
--- a/Packaging.Targets/RpmTask.cs
+++ b/Packaging.Targets/RpmTask.cs
@@ -124,6 +124,42 @@ public string ServiceName
set;
}
+ ///
+ /// Gets or sets an additional pre-installation script to execute.
+ ///
+ ///
+ /// This variable must contain the script itself, and not a path to a file
+ /// which contains the script.
+ ///
+ public string PreInstallScript { get; set; }
+
+ ///
+ /// Gets or sets an additional post-installation script to execute.
+ ///
+ ///
+ /// This variable must contain the script itself, and not a path to a file
+ /// which contains the script.
+ ///
+ public string PostInstallScript { get; set; }
+
+ ///
+ /// Gets or sets an additional pre-removal script to execute.
+ ///
+ ///
+ /// This variable must contain the script itself, and not a path to a file
+ /// which contains the script.
+ ///
+ public string PreRemoveScript { get; set; }
+
+ ///
+ /// Gets or sets an additional post-removal script to execute.
+ ///
+ ///
+ /// This variable must contain the script itself, and not a path to a file
+ /// which contains the script.
+ ///
+ public string PostRemoveScript { get; set; }
+
public override bool Execute()
{
this.Log.LogMessage(MessageImportance.Normal, "Creating RPM package '{0}' from folder '{1}'", this.RpmPath, this.PublishDir);
@@ -179,6 +215,10 @@ public override bool Execute()
this.InstallService,
this.ServiceName,
this.Prefix,
+ this.PreInstallScript,
+ this.PostInstallScript,
+ this.PreRemoveScript,
+ this.PostRemoveScript,
dependencies,
null,
privateKey,
diff --git a/Packaging.Targets/TaskItemExtensions.cs b/Packaging.Targets/TaskItemExtensions.cs
index a16876a2..b192f4a6 100644
--- a/Packaging.Targets/TaskItemExtensions.cs
+++ b/Packaging.Targets/TaskItemExtensions.cs
@@ -93,6 +93,26 @@ public static string GetLinuxFileMode(this ITaskItem item)
return TryGetValue(item, "LinuxFileMode");
}
+ ///
+ /// Gets the file mode of the file in the Linux filesystem.
+ ///
+ ///
+ /// The item for which to get the file mode.
+ ///
+ ///
+ /// The file mode of the file on the Linux file system.
+ ///
+ public static bool GetDocumentation(this ITaskItem item)
+ {
+ var docValue = TryGetValue(item, "Documentation");
+ if (docValue != null)
+ {
+ return docValue.ToLower().Equals("true");
+ }
+
+ return false;
+ }
+
///
/// Gets the Linux owner of the file.
///
diff --git a/Packaging.Targets/build/Packaging.Targets.targets b/Packaging.Targets/build/Packaging.Targets.targets
index 9fcc15e7..b70fa837 100644
--- a/Packaging.Targets/build/Packaging.Targets.targets
+++ b/Packaging.Targets/build/Packaging.Targets.targets
@@ -49,7 +49,11 @@
CreateUser="$(CreateUser)"
UserName="$(UserName)"
InstallService="$(InstallService)"
- ServiceName="$(ServiceName)"/>
+ ServiceName="$(ServiceName)"
+ PreInstallScript="$(PreInstallScript)"
+ PostInstallScript="$(PostInstallScript)"
+ PreRemoveScript="$(PreRemoveScript)"
+ PostRemoveScript="$(PostRemoveScript)"/>
@@ -67,7 +71,8 @@
+ and https://github.com/dotnet/dotnet-docker/blob/master/2.0/runtime-deps/stretch/amd64/Dockerfile,
+ See also https://github.com/dotnet/core-setup/blob/master/src/pkg/packaging/deb/dotnet-runtime-deps-debian_config_debian.9-x64.json -->
@@ -79,7 +84,7 @@
-
+
-
\ No newline at end of file
+
diff --git a/appveyor.yml b/appveyor.yml
index 262ba95f..0af3c4e3 100644
--- a/appveyor.yml
+++ b/appveyor.yml
@@ -1,12 +1,13 @@
image: Visual Studio 2017
version: '0.1.{build}'
+skip_branch_with_pr: true
before_build:
- dotnet restore dotnet-packaging.sln
build_script:
- - dotnet pack dotnet-packaging.sln -c Release --version-suffix r%APPVEYOR_BUILD_NUMBER%
+ - dotnet pack dotnet-packaging.sln -c Release
test_script:
- cmd: cd %APPVEYOR_BUILD_FOLDER%\Packaging.Targets.Tests\
@@ -16,12 +17,19 @@ test_script:
- ps: '& (Join-Path $env:APPVEYOR_BUILD_FOLDER "appveyor-testresults.ps1")'
- cmd: cd ..
+ - cmd: cd %APPVEYOR_BUILD_FOLDER%/demo/aspnetcore
+ - cmd: dotnet restore
+ - cmd: dotnet rpm -c Release -r rhel.7-x64 -f netcoreapp2.0
+ - cmd: dotnet deb -c Release -r ubuntu.16.04-x64 -f netcoreapp2.0
+
artifacts:
- - path: dotnet-tarball\bin\Release\dotnet-tarball.0.1.1-r$(APPVEYOR_BUILD_NUMBER).nupkg
- - path: dotnet-zip\bin\Release\dotnet-zip.0.1.1-r$(APPVEYOR_BUILD_NUMBER).nupkg
- - path: dotnet-rpm\bin\Release\dotnet-rpm.0.1.1-r$(APPVEYOR_BUILD_NUMBER).nupkg
- - path: dotnet-deb\bin\Release\dotnet-deb.0.1.1-r$(APPVEYOR_BUILD_NUMBER).nupkg
- - path: Packaging.Targets\bin\Release\Packaging.Targets.0.1.1-r$(APPVEYOR_BUILD_NUMBER).nupkg
+ - path: dotnet-tarball\bin\Release\dotnet-tarball.*.nupkg
+ - path: dotnet-zip\bin\Release\dotnet-zip.*.nupkg
+ - path: dotnet-rpm\bin\Release\dotnet-rpm.*.nupkg
+ - path: dotnet-deb\bin\Release\dotnet-deb.*.nupkg
+ - path: Packaging.Targets\bin\Release\Packaging.Targets.*.nupkg
+ - path: demo\**\*.deb
+ - path: demo\**\*.rpm
deploy:
provider: NuGet
diff --git a/demo/.gitignore b/demo/.gitignore
new file mode 100644
index 00000000..bf083423
--- /dev/null
+++ b/demo/.gitignore
@@ -0,0 +1 @@
+Directory.Build.props
diff --git a/demo/NuGet.config b/demo/NuGet.config
index 4ee39f12..4057ba83 100644
--- a/demo/NuGet.config
+++ b/demo/NuGet.config
@@ -1,10 +1,11 @@
-
-
-
-
+
+
+
+
+
-
\ No newline at end of file
+
diff --git a/demo/.bowerrc b/demo/aspnetcore/.bowerrc
similarity index 100%
rename from demo/.bowerrc
rename to demo/aspnetcore/.bowerrc
diff --git a/demo/Controllers/HomeController.cs b/demo/aspnetcore/Controllers/HomeController.cs
similarity index 100%
rename from demo/Controllers/HomeController.cs
rename to demo/aspnetcore/Controllers/HomeController.cs
diff --git a/demo/Program.cs b/demo/aspnetcore/Program.cs
similarity index 100%
rename from demo/Program.cs
rename to demo/aspnetcore/Program.cs
diff --git a/demo/Startup.cs b/demo/aspnetcore/Startup.cs
similarity index 100%
rename from demo/Startup.cs
rename to demo/aspnetcore/Startup.cs
diff --git a/demo/Views/Home/About.cshtml b/demo/aspnetcore/Views/Home/About.cshtml
similarity index 100%
rename from demo/Views/Home/About.cshtml
rename to demo/aspnetcore/Views/Home/About.cshtml
diff --git a/demo/Views/Home/Contact.cshtml b/demo/aspnetcore/Views/Home/Contact.cshtml
similarity index 100%
rename from demo/Views/Home/Contact.cshtml
rename to demo/aspnetcore/Views/Home/Contact.cshtml
diff --git a/demo/Views/Home/Index.cshtml b/demo/aspnetcore/Views/Home/Index.cshtml
similarity index 100%
rename from demo/Views/Home/Index.cshtml
rename to demo/aspnetcore/Views/Home/Index.cshtml
diff --git a/demo/Views/Shared/Error.cshtml b/demo/aspnetcore/Views/Shared/Error.cshtml
similarity index 100%
rename from demo/Views/Shared/Error.cshtml
rename to demo/aspnetcore/Views/Shared/Error.cshtml
diff --git a/demo/Views/Shared/_Layout.cshtml b/demo/aspnetcore/Views/Shared/_Layout.cshtml
similarity index 100%
rename from demo/Views/Shared/_Layout.cshtml
rename to demo/aspnetcore/Views/Shared/_Layout.cshtml
diff --git a/demo/Views/_ViewImports.cshtml b/demo/aspnetcore/Views/_ViewImports.cshtml
similarity index 100%
rename from demo/Views/_ViewImports.cshtml
rename to demo/aspnetcore/Views/_ViewImports.cshtml
diff --git a/demo/Views/_ViewStart.cshtml b/demo/aspnetcore/Views/_ViewStart.cshtml
similarity index 100%
rename from demo/Views/_ViewStart.cshtml
rename to demo/aspnetcore/Views/_ViewStart.cshtml
diff --git a/demo/appsettings.json b/demo/aspnetcore/appsettings.json
similarity index 100%
rename from demo/appsettings.json
rename to demo/aspnetcore/appsettings.json
diff --git a/demo/bower.json b/demo/aspnetcore/bower.json
similarity index 100%
rename from demo/bower.json
rename to demo/aspnetcore/bower.json
diff --git a/demo/bundleconfig.json b/demo/aspnetcore/bundleconfig.json
similarity index 100%
rename from demo/bundleconfig.json
rename to demo/aspnetcore/bundleconfig.json
diff --git a/demo/demo.csproj b/demo/aspnetcore/demo.csproj
similarity index 70%
rename from demo/demo.csproj
rename to demo/aspnetcore/demo.csproj
index 47180e0d..49f52182 100644
--- a/demo/demo.csproj
+++ b/demo/aspnetcore/demo.csproj
@@ -6,6 +6,7 @@
true
true
true
+ true
@@ -21,13 +22,14 @@
-
-
-
-
-
+
+
+
+
+
+
-
\ No newline at end of file
+
diff --git a/demo/demo.service b/demo/aspnetcore/demo.service
similarity index 100%
rename from demo/demo.service
rename to demo/aspnetcore/demo.service
diff --git a/demo/version.json b/demo/aspnetcore/version.json
similarity index 100%
rename from demo/version.json
rename to demo/aspnetcore/version.json
diff --git a/demo/web.config b/demo/aspnetcore/web.config
similarity index 100%
rename from demo/web.config
rename to demo/aspnetcore/web.config
diff --git a/demo/wwwroot/_references.js b/demo/aspnetcore/wwwroot/_references.js
similarity index 100%
rename from demo/wwwroot/_references.js
rename to demo/aspnetcore/wwwroot/_references.js
diff --git a/demo/wwwroot/css/site.css b/demo/aspnetcore/wwwroot/css/site.css
similarity index 100%
rename from demo/wwwroot/css/site.css
rename to demo/aspnetcore/wwwroot/css/site.css
diff --git a/demo/wwwroot/css/site.min.css b/demo/aspnetcore/wwwroot/css/site.min.css
similarity index 100%
rename from demo/wwwroot/css/site.min.css
rename to demo/aspnetcore/wwwroot/css/site.min.css
diff --git a/demo/wwwroot/favicon.ico b/demo/aspnetcore/wwwroot/favicon.ico
similarity index 100%
rename from demo/wwwroot/favicon.ico
rename to demo/aspnetcore/wwwroot/favicon.ico
diff --git a/demo/wwwroot/images/banner1.svg b/demo/aspnetcore/wwwroot/images/banner1.svg
similarity index 100%
rename from demo/wwwroot/images/banner1.svg
rename to demo/aspnetcore/wwwroot/images/banner1.svg
diff --git a/demo/wwwroot/images/banner2.svg b/demo/aspnetcore/wwwroot/images/banner2.svg
similarity index 100%
rename from demo/wwwroot/images/banner2.svg
rename to demo/aspnetcore/wwwroot/images/banner2.svg
diff --git a/demo/wwwroot/images/banner3.svg b/demo/aspnetcore/wwwroot/images/banner3.svg
similarity index 100%
rename from demo/wwwroot/images/banner3.svg
rename to demo/aspnetcore/wwwroot/images/banner3.svg
diff --git a/demo/wwwroot/images/banner4.svg b/demo/aspnetcore/wwwroot/images/banner4.svg
similarity index 100%
rename from demo/wwwroot/images/banner4.svg
rename to demo/aspnetcore/wwwroot/images/banner4.svg
diff --git a/demo/wwwroot/js/site.js b/demo/aspnetcore/wwwroot/js/site.js
similarity index 100%
rename from demo/wwwroot/js/site.js
rename to demo/aspnetcore/wwwroot/js/site.js
diff --git a/demo/wwwroot/js/site.min.js b/demo/aspnetcore/wwwroot/js/site.min.js
similarity index 100%
rename from demo/wwwroot/js/site.min.js
rename to demo/aspnetcore/wwwroot/js/site.min.js
diff --git a/demo/wwwroot/lib/bootstrap/.bower.json b/demo/aspnetcore/wwwroot/lib/bootstrap/.bower.json
similarity index 100%
rename from demo/wwwroot/lib/bootstrap/.bower.json
rename to demo/aspnetcore/wwwroot/lib/bootstrap/.bower.json
diff --git a/demo/wwwroot/lib/bootstrap/LICENSE b/demo/aspnetcore/wwwroot/lib/bootstrap/LICENSE
similarity index 100%
rename from demo/wwwroot/lib/bootstrap/LICENSE
rename to demo/aspnetcore/wwwroot/lib/bootstrap/LICENSE
diff --git a/demo/wwwroot/lib/bootstrap/dist/css/bootstrap-theme.css b/demo/aspnetcore/wwwroot/lib/bootstrap/dist/css/bootstrap-theme.css
similarity index 100%
rename from demo/wwwroot/lib/bootstrap/dist/css/bootstrap-theme.css
rename to demo/aspnetcore/wwwroot/lib/bootstrap/dist/css/bootstrap-theme.css
diff --git a/demo/wwwroot/lib/bootstrap/dist/css/bootstrap-theme.css.map b/demo/aspnetcore/wwwroot/lib/bootstrap/dist/css/bootstrap-theme.css.map
similarity index 100%
rename from demo/wwwroot/lib/bootstrap/dist/css/bootstrap-theme.css.map
rename to demo/aspnetcore/wwwroot/lib/bootstrap/dist/css/bootstrap-theme.css.map
diff --git a/demo/wwwroot/lib/bootstrap/dist/css/bootstrap-theme.min.css b/demo/aspnetcore/wwwroot/lib/bootstrap/dist/css/bootstrap-theme.min.css
similarity index 100%
rename from demo/wwwroot/lib/bootstrap/dist/css/bootstrap-theme.min.css
rename to demo/aspnetcore/wwwroot/lib/bootstrap/dist/css/bootstrap-theme.min.css
diff --git a/demo/wwwroot/lib/bootstrap/dist/css/bootstrap-theme.min.css.map b/demo/aspnetcore/wwwroot/lib/bootstrap/dist/css/bootstrap-theme.min.css.map
similarity index 100%
rename from demo/wwwroot/lib/bootstrap/dist/css/bootstrap-theme.min.css.map
rename to demo/aspnetcore/wwwroot/lib/bootstrap/dist/css/bootstrap-theme.min.css.map
diff --git a/demo/wwwroot/lib/bootstrap/dist/css/bootstrap.css b/demo/aspnetcore/wwwroot/lib/bootstrap/dist/css/bootstrap.css
similarity index 100%
rename from demo/wwwroot/lib/bootstrap/dist/css/bootstrap.css
rename to demo/aspnetcore/wwwroot/lib/bootstrap/dist/css/bootstrap.css
diff --git a/demo/wwwroot/lib/bootstrap/dist/css/bootstrap.css.map b/demo/aspnetcore/wwwroot/lib/bootstrap/dist/css/bootstrap.css.map
similarity index 100%
rename from demo/wwwroot/lib/bootstrap/dist/css/bootstrap.css.map
rename to demo/aspnetcore/wwwroot/lib/bootstrap/dist/css/bootstrap.css.map
diff --git a/demo/wwwroot/lib/bootstrap/dist/css/bootstrap.min.css b/demo/aspnetcore/wwwroot/lib/bootstrap/dist/css/bootstrap.min.css
similarity index 100%
rename from demo/wwwroot/lib/bootstrap/dist/css/bootstrap.min.css
rename to demo/aspnetcore/wwwroot/lib/bootstrap/dist/css/bootstrap.min.css
diff --git a/demo/wwwroot/lib/bootstrap/dist/css/bootstrap.min.css.map b/demo/aspnetcore/wwwroot/lib/bootstrap/dist/css/bootstrap.min.css.map
similarity index 100%
rename from demo/wwwroot/lib/bootstrap/dist/css/bootstrap.min.css.map
rename to demo/aspnetcore/wwwroot/lib/bootstrap/dist/css/bootstrap.min.css.map
diff --git a/demo/wwwroot/lib/bootstrap/dist/fonts/glyphicons-halflings-regular.eot b/demo/aspnetcore/wwwroot/lib/bootstrap/dist/fonts/glyphicons-halflings-regular.eot
similarity index 100%
rename from demo/wwwroot/lib/bootstrap/dist/fonts/glyphicons-halflings-regular.eot
rename to demo/aspnetcore/wwwroot/lib/bootstrap/dist/fonts/glyphicons-halflings-regular.eot
diff --git a/demo/wwwroot/lib/bootstrap/dist/fonts/glyphicons-halflings-regular.svg b/demo/aspnetcore/wwwroot/lib/bootstrap/dist/fonts/glyphicons-halflings-regular.svg
similarity index 100%
rename from demo/wwwroot/lib/bootstrap/dist/fonts/glyphicons-halflings-regular.svg
rename to demo/aspnetcore/wwwroot/lib/bootstrap/dist/fonts/glyphicons-halflings-regular.svg
diff --git a/demo/wwwroot/lib/bootstrap/dist/fonts/glyphicons-halflings-regular.ttf b/demo/aspnetcore/wwwroot/lib/bootstrap/dist/fonts/glyphicons-halflings-regular.ttf
similarity index 100%
rename from demo/wwwroot/lib/bootstrap/dist/fonts/glyphicons-halflings-regular.ttf
rename to demo/aspnetcore/wwwroot/lib/bootstrap/dist/fonts/glyphicons-halflings-regular.ttf
diff --git a/demo/wwwroot/lib/bootstrap/dist/fonts/glyphicons-halflings-regular.woff b/demo/aspnetcore/wwwroot/lib/bootstrap/dist/fonts/glyphicons-halflings-regular.woff
similarity index 100%
rename from demo/wwwroot/lib/bootstrap/dist/fonts/glyphicons-halflings-regular.woff
rename to demo/aspnetcore/wwwroot/lib/bootstrap/dist/fonts/glyphicons-halflings-regular.woff
diff --git a/demo/wwwroot/lib/bootstrap/dist/fonts/glyphicons-halflings-regular.woff2 b/demo/aspnetcore/wwwroot/lib/bootstrap/dist/fonts/glyphicons-halflings-regular.woff2
similarity index 100%
rename from demo/wwwroot/lib/bootstrap/dist/fonts/glyphicons-halflings-regular.woff2
rename to demo/aspnetcore/wwwroot/lib/bootstrap/dist/fonts/glyphicons-halflings-regular.woff2
diff --git a/demo/wwwroot/lib/bootstrap/dist/js/bootstrap.js b/demo/aspnetcore/wwwroot/lib/bootstrap/dist/js/bootstrap.js
similarity index 100%
rename from demo/wwwroot/lib/bootstrap/dist/js/bootstrap.js
rename to demo/aspnetcore/wwwroot/lib/bootstrap/dist/js/bootstrap.js
diff --git a/demo/wwwroot/lib/bootstrap/dist/js/bootstrap.min.js b/demo/aspnetcore/wwwroot/lib/bootstrap/dist/js/bootstrap.min.js
similarity index 100%
rename from demo/wwwroot/lib/bootstrap/dist/js/bootstrap.min.js
rename to demo/aspnetcore/wwwroot/lib/bootstrap/dist/js/bootstrap.min.js
diff --git a/demo/wwwroot/lib/bootstrap/dist/js/npm.js b/demo/aspnetcore/wwwroot/lib/bootstrap/dist/js/npm.js
similarity index 100%
rename from demo/wwwroot/lib/bootstrap/dist/js/npm.js
rename to demo/aspnetcore/wwwroot/lib/bootstrap/dist/js/npm.js
diff --git a/demo/wwwroot/lib/jquery-validation-unobtrusive/.bower.json b/demo/aspnetcore/wwwroot/lib/jquery-validation-unobtrusive/.bower.json
similarity index 100%
rename from demo/wwwroot/lib/jquery-validation-unobtrusive/.bower.json
rename to demo/aspnetcore/wwwroot/lib/jquery-validation-unobtrusive/.bower.json
diff --git a/demo/wwwroot/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.js b/demo/aspnetcore/wwwroot/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.js
similarity index 100%
rename from demo/wwwroot/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.js
rename to demo/aspnetcore/wwwroot/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.js
diff --git a/demo/wwwroot/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.min.js b/demo/aspnetcore/wwwroot/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.min.js
similarity index 100%
rename from demo/wwwroot/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.min.js
rename to demo/aspnetcore/wwwroot/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.min.js
diff --git a/demo/wwwroot/lib/jquery-validation/.bower.json b/demo/aspnetcore/wwwroot/lib/jquery-validation/.bower.json
similarity index 100%
rename from demo/wwwroot/lib/jquery-validation/.bower.json
rename to demo/aspnetcore/wwwroot/lib/jquery-validation/.bower.json
diff --git a/demo/wwwroot/lib/jquery-validation/LICENSE.md b/demo/aspnetcore/wwwroot/lib/jquery-validation/LICENSE.md
similarity index 100%
rename from demo/wwwroot/lib/jquery-validation/LICENSE.md
rename to demo/aspnetcore/wwwroot/lib/jquery-validation/LICENSE.md
diff --git a/demo/wwwroot/lib/jquery-validation/dist/additional-methods.js b/demo/aspnetcore/wwwroot/lib/jquery-validation/dist/additional-methods.js
similarity index 100%
rename from demo/wwwroot/lib/jquery-validation/dist/additional-methods.js
rename to demo/aspnetcore/wwwroot/lib/jquery-validation/dist/additional-methods.js
diff --git a/demo/wwwroot/lib/jquery-validation/dist/additional-methods.min.js b/demo/aspnetcore/wwwroot/lib/jquery-validation/dist/additional-methods.min.js
similarity index 100%
rename from demo/wwwroot/lib/jquery-validation/dist/additional-methods.min.js
rename to demo/aspnetcore/wwwroot/lib/jquery-validation/dist/additional-methods.min.js
diff --git a/demo/wwwroot/lib/jquery-validation/dist/jquery.validate.js b/demo/aspnetcore/wwwroot/lib/jquery-validation/dist/jquery.validate.js
similarity index 100%
rename from demo/wwwroot/lib/jquery-validation/dist/jquery.validate.js
rename to demo/aspnetcore/wwwroot/lib/jquery-validation/dist/jquery.validate.js
diff --git a/demo/wwwroot/lib/jquery-validation/dist/jquery.validate.min.js b/demo/aspnetcore/wwwroot/lib/jquery-validation/dist/jquery.validate.min.js
similarity index 100%
rename from demo/wwwroot/lib/jquery-validation/dist/jquery.validate.min.js
rename to demo/aspnetcore/wwwroot/lib/jquery-validation/dist/jquery.validate.min.js
diff --git a/demo/wwwroot/lib/jquery/.bower.json b/demo/aspnetcore/wwwroot/lib/jquery/.bower.json
similarity index 100%
rename from demo/wwwroot/lib/jquery/.bower.json
rename to demo/aspnetcore/wwwroot/lib/jquery/.bower.json
diff --git a/demo/wwwroot/lib/jquery/LICENSE.txt b/demo/aspnetcore/wwwroot/lib/jquery/LICENSE.txt
similarity index 100%
rename from demo/wwwroot/lib/jquery/LICENSE.txt
rename to demo/aspnetcore/wwwroot/lib/jquery/LICENSE.txt
diff --git a/demo/wwwroot/lib/jquery/dist/jquery.js b/demo/aspnetcore/wwwroot/lib/jquery/dist/jquery.js
similarity index 100%
rename from demo/wwwroot/lib/jquery/dist/jquery.js
rename to demo/aspnetcore/wwwroot/lib/jquery/dist/jquery.js
diff --git a/demo/wwwroot/lib/jquery/dist/jquery.min.js b/demo/aspnetcore/wwwroot/lib/jquery/dist/jquery.min.js
similarity index 100%
rename from demo/wwwroot/lib/jquery/dist/jquery.min.js
rename to demo/aspnetcore/wwwroot/lib/jquery/dist/jquery.min.js
diff --git a/demo/wwwroot/lib/jquery/dist/jquery.min.map b/demo/aspnetcore/wwwroot/lib/jquery/dist/jquery.min.map
similarity index 100%
rename from demo/wwwroot/lib/jquery/dist/jquery.min.map
rename to demo/aspnetcore/wwwroot/lib/jquery/dist/jquery.min.map
diff --git a/demo/clifdd/Program.cs b/demo/clifdd/Program.cs
new file mode 100644
index 00000000..5d7b3775
--- /dev/null
+++ b/demo/clifdd/Program.cs
@@ -0,0 +1,12 @@
+using System;
+
+namespace CliFdd
+{
+ class Program
+ {
+ static void Main(string[] args)
+ {
+ Console.WriteLine("Hello World!");
+ }
+ }
+}
diff --git a/demo/clifdd/clifdd.csproj b/demo/clifdd/clifdd.csproj
new file mode 100644
index 00000000..bcb824a4
--- /dev/null
+++ b/demo/clifdd/clifdd.csproj
@@ -0,0 +1,40 @@
+
+
+
+ Exe
+ win7-x64;win7-x86;win10-x64;win10-x86;osx-x64;debian.8-x64;ubuntu.16.10-x64;ubuntu.16.04-x64;opensuse-x64;ol-x64;rhel-x64;fedora-x64;centos-x64
+ netcoreapp2.1
+
+
+
+
+ /etc/clifdd
+ PreserveNewest
+
+
+ ~/.clifdd
+ PreserveNewest
+
+
+ true
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/demo/clifdd/clifdd.machine.config b/demo/clifdd/clifdd.machine.config
new file mode 100644
index 00000000..e69de29b
diff --git a/demo/clifdd/clifdd.user.config b/demo/clifdd/clifdd.user.config
new file mode 100644
index 00000000..e69de29b
diff --git a/demo/clifdd/readme.txt b/demo/clifdd/readme.txt
new file mode 100644
index 00000000..1045cf25
--- /dev/null
+++ b/demo/clifdd/readme.txt
@@ -0,0 +1 @@
+Test Test
\ No newline at end of file
diff --git a/demo/cliscd/Program.cs b/demo/cliscd/Program.cs
new file mode 100644
index 00000000..08f82dcc
--- /dev/null
+++ b/demo/cliscd/Program.cs
@@ -0,0 +1,12 @@
+using System;
+
+namespace CliScd
+{
+ class Program
+ {
+ static void Main(string[] args)
+ {
+ Console.WriteLine("Hello World!");
+ }
+ }
+}
diff --git a/demo/cliscd/centos.7-x64/Dockerfile b/demo/cliscd/centos.7-x64/Dockerfile
new file mode 100644
index 00000000..ec69a09f
--- /dev/null
+++ b/demo/cliscd/centos.7-x64/Dockerfile
@@ -0,0 +1,15 @@
+FROM centos:7
+
+COPY cliscd.1.0.0.centos.7-x64.rpm /pkg/
+COPY reference.txt /pkg/
+
+RUN yum update -y \
+&& yum install -y /pkg/cliscd.1.0.0.centos.7-x64.rpm
+
+RUN ls -a /usr/share/cliscd >> ~/testoutput.log 2>&1 || exit 0
+RUN ls -a /etc/cliscd >> ~/testoutput.log 2>&1 || exit 0
+RUN ls -a ~/.cliscd >> ~/testoutput.log 2>&1 || exit 0
+
+RUN diff -w /pkg/reference.txt ~/testoutput.log
+
+CMD [ "/usr/share/cliscd/cliscd" ]
diff --git a/demo/cliscd/centos.7-x64/reference.txt b/demo/cliscd/centos.7-x64/reference.txt
new file mode 100644
index 00000000..fddf788e
--- /dev/null
+++ b/demo/cliscd/centos.7-x64/reference.txt
@@ -0,0 +1,188 @@
+.
+..
+Microsoft.CSharp.dll
+Microsoft.VisualBasic.dll
+Microsoft.Win32.Primitives.dll
+Microsoft.Win32.Registry.dll
+SOS.NETCore.dll
+System.AppContext.dll
+System.Buffers.dll
+System.Collections.Concurrent.dll
+System.Collections.Immutable.dll
+System.Collections.NonGeneric.dll
+System.Collections.Specialized.dll
+System.Collections.dll
+System.ComponentModel.Annotations.dll
+System.ComponentModel.DataAnnotations.dll
+System.ComponentModel.EventBasedAsync.dll
+System.ComponentModel.Primitives.dll
+System.ComponentModel.TypeConverter.dll
+System.ComponentModel.dll
+System.Configuration.dll
+System.Console.dll
+System.Core.dll
+System.Data.Common.dll
+System.Data.dll
+System.Diagnostics.Contracts.dll
+System.Diagnostics.Debug.dll
+System.Diagnostics.DiagnosticSource.dll
+System.Diagnostics.FileVersionInfo.dll
+System.Diagnostics.Process.dll
+System.Diagnostics.StackTrace.dll
+System.Diagnostics.TextWriterTraceListener.dll
+System.Diagnostics.Tools.dll
+System.Diagnostics.TraceSource.dll
+System.Diagnostics.Tracing.dll
+System.Drawing.Primitives.dll
+System.Drawing.dll
+System.Dynamic.Runtime.dll
+System.Globalization.Calendars.dll
+System.Globalization.Extensions.dll
+System.Globalization.Native.so
+System.Globalization.dll
+System.IO.Compression.Brotli.dll
+System.IO.Compression.FileSystem.dll
+System.IO.Compression.Native.a
+System.IO.Compression.Native.so
+System.IO.Compression.ZipFile.dll
+System.IO.Compression.dll
+System.IO.FileSystem.AccessControl.dll
+System.IO.FileSystem.DriveInfo.dll
+System.IO.FileSystem.Primitives.dll
+System.IO.FileSystem.Watcher.dll
+System.IO.FileSystem.dll
+System.IO.IsolatedStorage.dll
+System.IO.MemoryMappedFiles.dll
+System.IO.Pipes.AccessControl.dll
+System.IO.Pipes.dll
+System.IO.UnmanagedMemoryStream.dll
+System.IO.dll
+System.Linq.Expressions.dll
+System.Linq.Parallel.dll
+System.Linq.Queryable.dll
+System.Linq.dll
+System.Memory.dll
+System.Native.a
+System.Native.so
+System.Net.Http.Native.a
+System.Net.Http.Native.so
+System.Net.Http.dll
+System.Net.HttpListener.dll
+System.Net.Mail.dll
+System.Net.NameResolution.dll
+System.Net.NetworkInformation.dll
+System.Net.Ping.dll
+System.Net.Primitives.dll
+System.Net.Requests.dll
+System.Net.Security.Native.a
+System.Net.Security.Native.so
+System.Net.Security.dll
+System.Net.ServicePoint.dll
+System.Net.Sockets.dll
+System.Net.WebClient.dll
+System.Net.WebHeaderCollection.dll
+System.Net.WebProxy.dll
+System.Net.WebSockets.Client.dll
+System.Net.WebSockets.dll
+System.Net.dll
+System.Numerics.Vectors.dll
+System.Numerics.dll
+System.ObjectModel.dll
+System.Private.CoreLib.dll
+System.Private.DataContractSerialization.dll
+System.Private.Uri.dll
+System.Private.Xml.Linq.dll
+System.Private.Xml.dll
+System.Reflection.DispatchProxy.dll
+System.Reflection.Emit.ILGeneration.dll
+System.Reflection.Emit.Lightweight.dll
+System.Reflection.Emit.dll
+System.Reflection.Extensions.dll
+System.Reflection.Metadata.dll
+System.Reflection.Primitives.dll
+System.Reflection.TypeExtensions.dll
+System.Reflection.dll
+System.Resources.Reader.dll
+System.Resources.ResourceManager.dll
+System.Resources.Writer.dll
+System.Runtime.CompilerServices.VisualC.dll
+System.Runtime.Extensions.dll
+System.Runtime.Handles.dll
+System.Runtime.InteropServices.RuntimeInformation.dll
+System.Runtime.InteropServices.WindowsRuntime.dll
+System.Runtime.InteropServices.dll
+System.Runtime.Loader.dll
+System.Runtime.Numerics.dll
+System.Runtime.Serialization.Formatters.dll
+System.Runtime.Serialization.Json.dll
+System.Runtime.Serialization.Primitives.dll
+System.Runtime.Serialization.Xml.dll
+System.Runtime.Serialization.dll
+System.Runtime.dll
+System.Security.AccessControl.dll
+System.Security.Claims.dll
+System.Security.Cryptography.Algorithms.dll
+System.Security.Cryptography.Cng.dll
+System.Security.Cryptography.Csp.dll
+System.Security.Cryptography.Encoding.dll
+System.Security.Cryptography.Native.OpenSsl.a
+System.Security.Cryptography.Native.OpenSsl.so
+System.Security.Cryptography.OpenSsl.dll
+System.Security.Cryptography.Primitives.dll
+System.Security.Cryptography.X509Certificates.dll
+System.Security.Principal.Windows.dll
+System.Security.Principal.dll
+System.Security.SecureString.dll
+System.Security.dll
+System.ServiceModel.Web.dll
+System.ServiceProcess.dll
+System.Text.Encoding.Extensions.dll
+System.Text.Encoding.dll
+System.Text.RegularExpressions.dll
+System.Threading.Overlapped.dll
+System.Threading.Tasks.Dataflow.dll
+System.Threading.Tasks.Extensions.dll
+System.Threading.Tasks.Parallel.dll
+System.Threading.Tasks.dll
+System.Threading.Thread.dll
+System.Threading.ThreadPool.dll
+System.Threading.Timer.dll
+System.Threading.dll
+System.Transactions.Local.dll
+System.Transactions.dll
+System.ValueTuple.dll
+System.Web.HttpUtility.dll
+System.Web.dll
+System.Windows.dll
+System.Xml.Linq.dll
+System.Xml.ReaderWriter.dll
+System.Xml.Serialization.dll
+System.Xml.XDocument.dll
+System.Xml.XPath.XDocument.dll
+System.Xml.XPath.dll
+System.Xml.XmlDocument.dll
+System.Xml.XmlSerializer.dll
+System.Xml.dll
+System.dll
+WindowsBase.dll
+cliscd
+cliscd.deps.json
+cliscd.dll
+cliscd.pdb
+cliscd.runtimeconfig.json
+createdump
+libclrjit.so
+libcoreclr.so
+libcoreclrtraceptprovider.so
+libdbgshim.so
+libhostfxr.so
+libhostpolicy.so
+libmscordaccore.so
+libmscordbi.so
+libsos.so
+libsosplugin.so
+mscorlib.dll
+netstandard.dll
+sosdocsunix.txt
+ls: cannot access /etc/cliscd: No such file or directory
+ls: cannot access /root/.cliscd: No such file or directory
diff --git a/demo/cliscd/cliscd.csproj b/demo/cliscd/cliscd.csproj
new file mode 100644
index 00000000..206c7071
--- /dev/null
+++ b/demo/cliscd/cliscd.csproj
@@ -0,0 +1,73 @@
+
+
+
+ Exe
+ win7-x64;win7-x86;win10-x64;win10-x86;osx-x64;debian.8-x64;debian.9-x64;ubuntu.18.04-x64;ubuntu.16.04-x64;ubuntu.14.04-x64;opensuse.42.3-x64;ol.7-x64;rhel-x64;fedora.27-x64;fedora.28-x64;centos.7-x64
+ netcoreapp2.1
+ true
+
+
+
+
+ /etc/clifdd
+ PreserveNewest
+
+
+ ~/.clifdd
+ PreserveNewest
+
+
+ true
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/demo/cliscd/cliscd.machine.config b/demo/cliscd/cliscd.machine.config
new file mode 100644
index 00000000..e69de29b
diff --git a/demo/cliscd/cliscd.user.config b/demo/cliscd/cliscd.user.config
new file mode 100644
index 00000000..e69de29b
diff --git a/demo/cliscd/debian.8-x64/Dockerfile b/demo/cliscd/debian.8-x64/Dockerfile
new file mode 100644
index 00000000..4bba69ab
--- /dev/null
+++ b/demo/cliscd/debian.8-x64/Dockerfile
@@ -0,0 +1,16 @@
+FROM debian:8
+
+ENV rid=debian.8-x64
+COPY cliscd.1.0.0.$rid.deb /pkg/
+COPY reference.txt /pkg/
+
+RUN apt-get update \
+&& dpkg -i /pkg/cliscd.1.0.0.$rid.deb || apt-get install -f -y
+
+RUN ls -a /usr/share/cliscd >> ~/testoutput.log 2>&1 || exit 0
+RUN ls -a /etc/cliscd >> ~/testoutput.log 2>&1 || exit 0
+RUN ls -a ~/.cliscd >> ~/testoutput.log 2>&1 || exit 0
+
+RUN diff -w /pkg/reference.txt ~/testoutput.log
+
+CMD [ "/usr/share/cliscd/cliscd" ]
diff --git a/demo/cliscd/debian.8-x64/reference.txt b/demo/cliscd/debian.8-x64/reference.txt
new file mode 100644
index 00000000..fddf788e
--- /dev/null
+++ b/demo/cliscd/debian.8-x64/reference.txt
@@ -0,0 +1,188 @@
+.
+..
+Microsoft.CSharp.dll
+Microsoft.VisualBasic.dll
+Microsoft.Win32.Primitives.dll
+Microsoft.Win32.Registry.dll
+SOS.NETCore.dll
+System.AppContext.dll
+System.Buffers.dll
+System.Collections.Concurrent.dll
+System.Collections.Immutable.dll
+System.Collections.NonGeneric.dll
+System.Collections.Specialized.dll
+System.Collections.dll
+System.ComponentModel.Annotations.dll
+System.ComponentModel.DataAnnotations.dll
+System.ComponentModel.EventBasedAsync.dll
+System.ComponentModel.Primitives.dll
+System.ComponentModel.TypeConverter.dll
+System.ComponentModel.dll
+System.Configuration.dll
+System.Console.dll
+System.Core.dll
+System.Data.Common.dll
+System.Data.dll
+System.Diagnostics.Contracts.dll
+System.Diagnostics.Debug.dll
+System.Diagnostics.DiagnosticSource.dll
+System.Diagnostics.FileVersionInfo.dll
+System.Diagnostics.Process.dll
+System.Diagnostics.StackTrace.dll
+System.Diagnostics.TextWriterTraceListener.dll
+System.Diagnostics.Tools.dll
+System.Diagnostics.TraceSource.dll
+System.Diagnostics.Tracing.dll
+System.Drawing.Primitives.dll
+System.Drawing.dll
+System.Dynamic.Runtime.dll
+System.Globalization.Calendars.dll
+System.Globalization.Extensions.dll
+System.Globalization.Native.so
+System.Globalization.dll
+System.IO.Compression.Brotli.dll
+System.IO.Compression.FileSystem.dll
+System.IO.Compression.Native.a
+System.IO.Compression.Native.so
+System.IO.Compression.ZipFile.dll
+System.IO.Compression.dll
+System.IO.FileSystem.AccessControl.dll
+System.IO.FileSystem.DriveInfo.dll
+System.IO.FileSystem.Primitives.dll
+System.IO.FileSystem.Watcher.dll
+System.IO.FileSystem.dll
+System.IO.IsolatedStorage.dll
+System.IO.MemoryMappedFiles.dll
+System.IO.Pipes.AccessControl.dll
+System.IO.Pipes.dll
+System.IO.UnmanagedMemoryStream.dll
+System.IO.dll
+System.Linq.Expressions.dll
+System.Linq.Parallel.dll
+System.Linq.Queryable.dll
+System.Linq.dll
+System.Memory.dll
+System.Native.a
+System.Native.so
+System.Net.Http.Native.a
+System.Net.Http.Native.so
+System.Net.Http.dll
+System.Net.HttpListener.dll
+System.Net.Mail.dll
+System.Net.NameResolution.dll
+System.Net.NetworkInformation.dll
+System.Net.Ping.dll
+System.Net.Primitives.dll
+System.Net.Requests.dll
+System.Net.Security.Native.a
+System.Net.Security.Native.so
+System.Net.Security.dll
+System.Net.ServicePoint.dll
+System.Net.Sockets.dll
+System.Net.WebClient.dll
+System.Net.WebHeaderCollection.dll
+System.Net.WebProxy.dll
+System.Net.WebSockets.Client.dll
+System.Net.WebSockets.dll
+System.Net.dll
+System.Numerics.Vectors.dll
+System.Numerics.dll
+System.ObjectModel.dll
+System.Private.CoreLib.dll
+System.Private.DataContractSerialization.dll
+System.Private.Uri.dll
+System.Private.Xml.Linq.dll
+System.Private.Xml.dll
+System.Reflection.DispatchProxy.dll
+System.Reflection.Emit.ILGeneration.dll
+System.Reflection.Emit.Lightweight.dll
+System.Reflection.Emit.dll
+System.Reflection.Extensions.dll
+System.Reflection.Metadata.dll
+System.Reflection.Primitives.dll
+System.Reflection.TypeExtensions.dll
+System.Reflection.dll
+System.Resources.Reader.dll
+System.Resources.ResourceManager.dll
+System.Resources.Writer.dll
+System.Runtime.CompilerServices.VisualC.dll
+System.Runtime.Extensions.dll
+System.Runtime.Handles.dll
+System.Runtime.InteropServices.RuntimeInformation.dll
+System.Runtime.InteropServices.WindowsRuntime.dll
+System.Runtime.InteropServices.dll
+System.Runtime.Loader.dll
+System.Runtime.Numerics.dll
+System.Runtime.Serialization.Formatters.dll
+System.Runtime.Serialization.Json.dll
+System.Runtime.Serialization.Primitives.dll
+System.Runtime.Serialization.Xml.dll
+System.Runtime.Serialization.dll
+System.Runtime.dll
+System.Security.AccessControl.dll
+System.Security.Claims.dll
+System.Security.Cryptography.Algorithms.dll
+System.Security.Cryptography.Cng.dll
+System.Security.Cryptography.Csp.dll
+System.Security.Cryptography.Encoding.dll
+System.Security.Cryptography.Native.OpenSsl.a
+System.Security.Cryptography.Native.OpenSsl.so
+System.Security.Cryptography.OpenSsl.dll
+System.Security.Cryptography.Primitives.dll
+System.Security.Cryptography.X509Certificates.dll
+System.Security.Principal.Windows.dll
+System.Security.Principal.dll
+System.Security.SecureString.dll
+System.Security.dll
+System.ServiceModel.Web.dll
+System.ServiceProcess.dll
+System.Text.Encoding.Extensions.dll
+System.Text.Encoding.dll
+System.Text.RegularExpressions.dll
+System.Threading.Overlapped.dll
+System.Threading.Tasks.Dataflow.dll
+System.Threading.Tasks.Extensions.dll
+System.Threading.Tasks.Parallel.dll
+System.Threading.Tasks.dll
+System.Threading.Thread.dll
+System.Threading.ThreadPool.dll
+System.Threading.Timer.dll
+System.Threading.dll
+System.Transactions.Local.dll
+System.Transactions.dll
+System.ValueTuple.dll
+System.Web.HttpUtility.dll
+System.Web.dll
+System.Windows.dll
+System.Xml.Linq.dll
+System.Xml.ReaderWriter.dll
+System.Xml.Serialization.dll
+System.Xml.XDocument.dll
+System.Xml.XPath.XDocument.dll
+System.Xml.XPath.dll
+System.Xml.XmlDocument.dll
+System.Xml.XmlSerializer.dll
+System.Xml.dll
+System.dll
+WindowsBase.dll
+cliscd
+cliscd.deps.json
+cliscd.dll
+cliscd.pdb
+cliscd.runtimeconfig.json
+createdump
+libclrjit.so
+libcoreclr.so
+libcoreclrtraceptprovider.so
+libdbgshim.so
+libhostfxr.so
+libhostpolicy.so
+libmscordaccore.so
+libmscordbi.so
+libsos.so
+libsosplugin.so
+mscorlib.dll
+netstandard.dll
+sosdocsunix.txt
+ls: cannot access /etc/cliscd: No such file or directory
+ls: cannot access /root/.cliscd: No such file or directory
diff --git a/demo/cliscd/debian.9-x64/Dockerfile b/demo/cliscd/debian.9-x64/Dockerfile
new file mode 100644
index 00000000..3ff54d43
--- /dev/null
+++ b/demo/cliscd/debian.9-x64/Dockerfile
@@ -0,0 +1,16 @@
+FROM debian:9
+
+ENV rid=debian.9-x64
+COPY cliscd.1.0.0.$rid.deb /pkg/
+COPY reference.txt /pkg/
+
+RUN apt-get update \
+&& dpkg -i /pkg/cliscd.1.0.0.$rid.deb || apt-get install -f -y
+
+RUN ls -a /usr/share/cliscd >> ~/testoutput.log 2>&1 || exit 0
+RUN ls -a /etc/cliscd >> ~/testoutput.log 2>&1 || exit 0
+RUN ls -a ~/.cliscd >> ~/testoutput.log 2>&1 || exit 0
+
+RUN diff -w /pkg/reference.txt ~/testoutput.log
+
+CMD [ "/usr/share/cliscd/cliscd" ]
diff --git a/demo/cliscd/debian.9-x64/reference.txt b/demo/cliscd/debian.9-x64/reference.txt
new file mode 100644
index 00000000..83cb79c4
--- /dev/null
+++ b/demo/cliscd/debian.9-x64/reference.txt
@@ -0,0 +1,188 @@
+.
+..
+Microsoft.CSharp.dll
+Microsoft.VisualBasic.dll
+Microsoft.Win32.Primitives.dll
+Microsoft.Win32.Registry.dll
+SOS.NETCore.dll
+System.AppContext.dll
+System.Buffers.dll
+System.Collections.Concurrent.dll
+System.Collections.Immutable.dll
+System.Collections.NonGeneric.dll
+System.Collections.Specialized.dll
+System.Collections.dll
+System.ComponentModel.Annotations.dll
+System.ComponentModel.DataAnnotations.dll
+System.ComponentModel.EventBasedAsync.dll
+System.ComponentModel.Primitives.dll
+System.ComponentModel.TypeConverter.dll
+System.ComponentModel.dll
+System.Configuration.dll
+System.Console.dll
+System.Core.dll
+System.Data.Common.dll
+System.Data.dll
+System.Diagnostics.Contracts.dll
+System.Diagnostics.Debug.dll
+System.Diagnostics.DiagnosticSource.dll
+System.Diagnostics.FileVersionInfo.dll
+System.Diagnostics.Process.dll
+System.Diagnostics.StackTrace.dll
+System.Diagnostics.TextWriterTraceListener.dll
+System.Diagnostics.Tools.dll
+System.Diagnostics.TraceSource.dll
+System.Diagnostics.Tracing.dll
+System.Drawing.Primitives.dll
+System.Drawing.dll
+System.Dynamic.Runtime.dll
+System.Globalization.Calendars.dll
+System.Globalization.Extensions.dll
+System.Globalization.Native.so
+System.Globalization.dll
+System.IO.Compression.Brotli.dll
+System.IO.Compression.FileSystem.dll
+System.IO.Compression.Native.a
+System.IO.Compression.Native.so
+System.IO.Compression.ZipFile.dll
+System.IO.Compression.dll
+System.IO.FileSystem.AccessControl.dll
+System.IO.FileSystem.DriveInfo.dll
+System.IO.FileSystem.Primitives.dll
+System.IO.FileSystem.Watcher.dll
+System.IO.FileSystem.dll
+System.IO.IsolatedStorage.dll
+System.IO.MemoryMappedFiles.dll
+System.IO.Pipes.AccessControl.dll
+System.IO.Pipes.dll
+System.IO.UnmanagedMemoryStream.dll
+System.IO.dll
+System.Linq.Expressions.dll
+System.Linq.Parallel.dll
+System.Linq.Queryable.dll
+System.Linq.dll
+System.Memory.dll
+System.Native.a
+System.Native.so
+System.Net.Http.Native.a
+System.Net.Http.Native.so
+System.Net.Http.dll
+System.Net.HttpListener.dll
+System.Net.Mail.dll
+System.Net.NameResolution.dll
+System.Net.NetworkInformation.dll
+System.Net.Ping.dll
+System.Net.Primitives.dll
+System.Net.Requests.dll
+System.Net.Security.Native.a
+System.Net.Security.Native.so
+System.Net.Security.dll
+System.Net.ServicePoint.dll
+System.Net.Sockets.dll
+System.Net.WebClient.dll
+System.Net.WebHeaderCollection.dll
+System.Net.WebProxy.dll
+System.Net.WebSockets.Client.dll
+System.Net.WebSockets.dll
+System.Net.dll
+System.Numerics.Vectors.dll
+System.Numerics.dll
+System.ObjectModel.dll
+System.Private.CoreLib.dll
+System.Private.DataContractSerialization.dll
+System.Private.Uri.dll
+System.Private.Xml.Linq.dll
+System.Private.Xml.dll
+System.Reflection.DispatchProxy.dll
+System.Reflection.Emit.ILGeneration.dll
+System.Reflection.Emit.Lightweight.dll
+System.Reflection.Emit.dll
+System.Reflection.Extensions.dll
+System.Reflection.Metadata.dll
+System.Reflection.Primitives.dll
+System.Reflection.TypeExtensions.dll
+System.Reflection.dll
+System.Resources.Reader.dll
+System.Resources.ResourceManager.dll
+System.Resources.Writer.dll
+System.Runtime.CompilerServices.VisualC.dll
+System.Runtime.Extensions.dll
+System.Runtime.Handles.dll
+System.Runtime.InteropServices.RuntimeInformation.dll
+System.Runtime.InteropServices.WindowsRuntime.dll
+System.Runtime.InteropServices.dll
+System.Runtime.Loader.dll
+System.Runtime.Numerics.dll
+System.Runtime.Serialization.Formatters.dll
+System.Runtime.Serialization.Json.dll
+System.Runtime.Serialization.Primitives.dll
+System.Runtime.Serialization.Xml.dll
+System.Runtime.Serialization.dll
+System.Runtime.dll
+System.Security.AccessControl.dll
+System.Security.Claims.dll
+System.Security.Cryptography.Algorithms.dll
+System.Security.Cryptography.Cng.dll
+System.Security.Cryptography.Csp.dll
+System.Security.Cryptography.Encoding.dll
+System.Security.Cryptography.Native.OpenSsl.a
+System.Security.Cryptography.Native.OpenSsl.so
+System.Security.Cryptography.OpenSsl.dll
+System.Security.Cryptography.Primitives.dll
+System.Security.Cryptography.X509Certificates.dll
+System.Security.Principal.Windows.dll
+System.Security.Principal.dll
+System.Security.SecureString.dll
+System.Security.dll
+System.ServiceModel.Web.dll
+System.ServiceProcess.dll
+System.Text.Encoding.Extensions.dll
+System.Text.Encoding.dll
+System.Text.RegularExpressions.dll
+System.Threading.Overlapped.dll
+System.Threading.Tasks.Dataflow.dll
+System.Threading.Tasks.Extensions.dll
+System.Threading.Tasks.Parallel.dll
+System.Threading.Tasks.dll
+System.Threading.Thread.dll
+System.Threading.ThreadPool.dll
+System.Threading.Timer.dll
+System.Threading.dll
+System.Transactions.Local.dll
+System.Transactions.dll
+System.ValueTuple.dll
+System.Web.HttpUtility.dll
+System.Web.dll
+System.Windows.dll
+System.Xml.Linq.dll
+System.Xml.ReaderWriter.dll
+System.Xml.Serialization.dll
+System.Xml.XDocument.dll
+System.Xml.XPath.XDocument.dll
+System.Xml.XPath.dll
+System.Xml.XmlDocument.dll
+System.Xml.XmlSerializer.dll
+System.Xml.dll
+System.dll
+WindowsBase.dll
+cliscd
+cliscd.deps.json
+cliscd.dll
+cliscd.pdb
+cliscd.runtimeconfig.json
+createdump
+libclrjit.so
+libcoreclr.so
+libcoreclrtraceptprovider.so
+libdbgshim.so
+libhostfxr.so
+libhostpolicy.so
+libmscordaccore.so
+libmscordbi.so
+libsos.so
+libsosplugin.so
+mscorlib.dll
+netstandard.dll
+sosdocsunix.txt
+ls: cannot access '/etc/cliscd': No such file or directory
+ls: cannot access '/root/.cliscd': No such file or directory
diff --git a/demo/cliscd/fedora.27-x64/Dockerfile b/demo/cliscd/fedora.27-x64/Dockerfile
new file mode 100644
index 00000000..7cc0c6e6
--- /dev/null
+++ b/demo/cliscd/fedora.27-x64/Dockerfile
@@ -0,0 +1,17 @@
+FROM fedora:27
+
+ENV rid=fedora.27-x64
+
+COPY cliscd.1.0.0.$rid.rpm /pkg/
+COPY reference.txt /pkg/
+
+RUN yum update -y \
+&& yum install -y /pkg/cliscd.1.0.0.$rid.rpm
+
+RUN ls -a /usr/share/cliscd >> ~/testoutput.log 2>&1 || exit 0
+RUN ls -a /etc/cliscd >> ~/testoutput.log 2>&1 || exit 0
+RUN ls -a ~/.cliscd >> ~/testoutput.log 2>&1 || exit 0
+
+RUN diff -w /pkg/reference.txt ~/testoutput.log
+
+CMD [ "/usr/share/cliscd/cliscd" ]
diff --git a/demo/cliscd/fedora.27-x64/reference.txt b/demo/cliscd/fedora.27-x64/reference.txt
new file mode 100644
index 00000000..83cb79c4
--- /dev/null
+++ b/demo/cliscd/fedora.27-x64/reference.txt
@@ -0,0 +1,188 @@
+.
+..
+Microsoft.CSharp.dll
+Microsoft.VisualBasic.dll
+Microsoft.Win32.Primitives.dll
+Microsoft.Win32.Registry.dll
+SOS.NETCore.dll
+System.AppContext.dll
+System.Buffers.dll
+System.Collections.Concurrent.dll
+System.Collections.Immutable.dll
+System.Collections.NonGeneric.dll
+System.Collections.Specialized.dll
+System.Collections.dll
+System.ComponentModel.Annotations.dll
+System.ComponentModel.DataAnnotations.dll
+System.ComponentModel.EventBasedAsync.dll
+System.ComponentModel.Primitives.dll
+System.ComponentModel.TypeConverter.dll
+System.ComponentModel.dll
+System.Configuration.dll
+System.Console.dll
+System.Core.dll
+System.Data.Common.dll
+System.Data.dll
+System.Diagnostics.Contracts.dll
+System.Diagnostics.Debug.dll
+System.Diagnostics.DiagnosticSource.dll
+System.Diagnostics.FileVersionInfo.dll
+System.Diagnostics.Process.dll
+System.Diagnostics.StackTrace.dll
+System.Diagnostics.TextWriterTraceListener.dll
+System.Diagnostics.Tools.dll
+System.Diagnostics.TraceSource.dll
+System.Diagnostics.Tracing.dll
+System.Drawing.Primitives.dll
+System.Drawing.dll
+System.Dynamic.Runtime.dll
+System.Globalization.Calendars.dll
+System.Globalization.Extensions.dll
+System.Globalization.Native.so
+System.Globalization.dll
+System.IO.Compression.Brotli.dll
+System.IO.Compression.FileSystem.dll
+System.IO.Compression.Native.a
+System.IO.Compression.Native.so
+System.IO.Compression.ZipFile.dll
+System.IO.Compression.dll
+System.IO.FileSystem.AccessControl.dll
+System.IO.FileSystem.DriveInfo.dll
+System.IO.FileSystem.Primitives.dll
+System.IO.FileSystem.Watcher.dll
+System.IO.FileSystem.dll
+System.IO.IsolatedStorage.dll
+System.IO.MemoryMappedFiles.dll
+System.IO.Pipes.AccessControl.dll
+System.IO.Pipes.dll
+System.IO.UnmanagedMemoryStream.dll
+System.IO.dll
+System.Linq.Expressions.dll
+System.Linq.Parallel.dll
+System.Linq.Queryable.dll
+System.Linq.dll
+System.Memory.dll
+System.Native.a
+System.Native.so
+System.Net.Http.Native.a
+System.Net.Http.Native.so
+System.Net.Http.dll
+System.Net.HttpListener.dll
+System.Net.Mail.dll
+System.Net.NameResolution.dll
+System.Net.NetworkInformation.dll
+System.Net.Ping.dll
+System.Net.Primitives.dll
+System.Net.Requests.dll
+System.Net.Security.Native.a
+System.Net.Security.Native.so
+System.Net.Security.dll
+System.Net.ServicePoint.dll
+System.Net.Sockets.dll
+System.Net.WebClient.dll
+System.Net.WebHeaderCollection.dll
+System.Net.WebProxy.dll
+System.Net.WebSockets.Client.dll
+System.Net.WebSockets.dll
+System.Net.dll
+System.Numerics.Vectors.dll
+System.Numerics.dll
+System.ObjectModel.dll
+System.Private.CoreLib.dll
+System.Private.DataContractSerialization.dll
+System.Private.Uri.dll
+System.Private.Xml.Linq.dll
+System.Private.Xml.dll
+System.Reflection.DispatchProxy.dll
+System.Reflection.Emit.ILGeneration.dll
+System.Reflection.Emit.Lightweight.dll
+System.Reflection.Emit.dll
+System.Reflection.Extensions.dll
+System.Reflection.Metadata.dll
+System.Reflection.Primitives.dll
+System.Reflection.TypeExtensions.dll
+System.Reflection.dll
+System.Resources.Reader.dll
+System.Resources.ResourceManager.dll
+System.Resources.Writer.dll
+System.Runtime.CompilerServices.VisualC.dll
+System.Runtime.Extensions.dll
+System.Runtime.Handles.dll
+System.Runtime.InteropServices.RuntimeInformation.dll
+System.Runtime.InteropServices.WindowsRuntime.dll
+System.Runtime.InteropServices.dll
+System.Runtime.Loader.dll
+System.Runtime.Numerics.dll
+System.Runtime.Serialization.Formatters.dll
+System.Runtime.Serialization.Json.dll
+System.Runtime.Serialization.Primitives.dll
+System.Runtime.Serialization.Xml.dll
+System.Runtime.Serialization.dll
+System.Runtime.dll
+System.Security.AccessControl.dll
+System.Security.Claims.dll
+System.Security.Cryptography.Algorithms.dll
+System.Security.Cryptography.Cng.dll
+System.Security.Cryptography.Csp.dll
+System.Security.Cryptography.Encoding.dll
+System.Security.Cryptography.Native.OpenSsl.a
+System.Security.Cryptography.Native.OpenSsl.so
+System.Security.Cryptography.OpenSsl.dll
+System.Security.Cryptography.Primitives.dll
+System.Security.Cryptography.X509Certificates.dll
+System.Security.Principal.Windows.dll
+System.Security.Principal.dll
+System.Security.SecureString.dll
+System.Security.dll
+System.ServiceModel.Web.dll
+System.ServiceProcess.dll
+System.Text.Encoding.Extensions.dll
+System.Text.Encoding.dll
+System.Text.RegularExpressions.dll
+System.Threading.Overlapped.dll
+System.Threading.Tasks.Dataflow.dll
+System.Threading.Tasks.Extensions.dll
+System.Threading.Tasks.Parallel.dll
+System.Threading.Tasks.dll
+System.Threading.Thread.dll
+System.Threading.ThreadPool.dll
+System.Threading.Timer.dll
+System.Threading.dll
+System.Transactions.Local.dll
+System.Transactions.dll
+System.ValueTuple.dll
+System.Web.HttpUtility.dll
+System.Web.dll
+System.Windows.dll
+System.Xml.Linq.dll
+System.Xml.ReaderWriter.dll
+System.Xml.Serialization.dll
+System.Xml.XDocument.dll
+System.Xml.XPath.XDocument.dll
+System.Xml.XPath.dll
+System.Xml.XmlDocument.dll
+System.Xml.XmlSerializer.dll
+System.Xml.dll
+System.dll
+WindowsBase.dll
+cliscd
+cliscd.deps.json
+cliscd.dll
+cliscd.pdb
+cliscd.runtimeconfig.json
+createdump
+libclrjit.so
+libcoreclr.so
+libcoreclrtraceptprovider.so
+libdbgshim.so
+libhostfxr.so
+libhostpolicy.so
+libmscordaccore.so
+libmscordbi.so
+libsos.so
+libsosplugin.so
+mscorlib.dll
+netstandard.dll
+sosdocsunix.txt
+ls: cannot access '/etc/cliscd': No such file or directory
+ls: cannot access '/root/.cliscd': No such file or directory
diff --git a/demo/cliscd/fedora.28-x64/Dockerfile b/demo/cliscd/fedora.28-x64/Dockerfile
new file mode 100644
index 00000000..8ce18064
--- /dev/null
+++ b/demo/cliscd/fedora.28-x64/Dockerfile
@@ -0,0 +1,17 @@
+FROM fedora:28
+
+ENV rid=fedora.28-x64
+
+COPY cliscd.1.0.0.$rid.rpm /pkg/
+COPY reference.txt /pkg/
+
+RUN yum update -y \
+&& yum install -y /pkg/cliscd.1.0.0.$rid.rpm
+
+RUN ls -a /usr/share/cliscd >> ~/testoutput.log 2>&1 || exit 0
+RUN ls -a /etc/cliscd >> ~/testoutput.log 2>&1 || exit 0
+RUN ls -a ~/.cliscd >> ~/testoutput.log 2>&1 || exit 0
+
+RUN diff -w /pkg/reference.txt ~/testoutput.log
+
+CMD [ "/usr/share/cliscd/cliscd" ]
diff --git a/demo/cliscd/fedora.28-x64/reference.txt b/demo/cliscd/fedora.28-x64/reference.txt
new file mode 100644
index 00000000..83cb79c4
--- /dev/null
+++ b/demo/cliscd/fedora.28-x64/reference.txt
@@ -0,0 +1,188 @@
+.
+..
+Microsoft.CSharp.dll
+Microsoft.VisualBasic.dll
+Microsoft.Win32.Primitives.dll
+Microsoft.Win32.Registry.dll
+SOS.NETCore.dll
+System.AppContext.dll
+System.Buffers.dll
+System.Collections.Concurrent.dll
+System.Collections.Immutable.dll
+System.Collections.NonGeneric.dll
+System.Collections.Specialized.dll
+System.Collections.dll
+System.ComponentModel.Annotations.dll
+System.ComponentModel.DataAnnotations.dll
+System.ComponentModel.EventBasedAsync.dll
+System.ComponentModel.Primitives.dll
+System.ComponentModel.TypeConverter.dll
+System.ComponentModel.dll
+System.Configuration.dll
+System.Console.dll
+System.Core.dll
+System.Data.Common.dll
+System.Data.dll
+System.Diagnostics.Contracts.dll
+System.Diagnostics.Debug.dll
+System.Diagnostics.DiagnosticSource.dll
+System.Diagnostics.FileVersionInfo.dll
+System.Diagnostics.Process.dll
+System.Diagnostics.StackTrace.dll
+System.Diagnostics.TextWriterTraceListener.dll
+System.Diagnostics.Tools.dll
+System.Diagnostics.TraceSource.dll
+System.Diagnostics.Tracing.dll
+System.Drawing.Primitives.dll
+System.Drawing.dll
+System.Dynamic.Runtime.dll
+System.Globalization.Calendars.dll
+System.Globalization.Extensions.dll
+System.Globalization.Native.so
+System.Globalization.dll
+System.IO.Compression.Brotli.dll
+System.IO.Compression.FileSystem.dll
+System.IO.Compression.Native.a
+System.IO.Compression.Native.so
+System.IO.Compression.ZipFile.dll
+System.IO.Compression.dll
+System.IO.FileSystem.AccessControl.dll
+System.IO.FileSystem.DriveInfo.dll
+System.IO.FileSystem.Primitives.dll
+System.IO.FileSystem.Watcher.dll
+System.IO.FileSystem.dll
+System.IO.IsolatedStorage.dll
+System.IO.MemoryMappedFiles.dll
+System.IO.Pipes.AccessControl.dll
+System.IO.Pipes.dll
+System.IO.UnmanagedMemoryStream.dll
+System.IO.dll
+System.Linq.Expressions.dll
+System.Linq.Parallel.dll
+System.Linq.Queryable.dll
+System.Linq.dll
+System.Memory.dll
+System.Native.a
+System.Native.so
+System.Net.Http.Native.a
+System.Net.Http.Native.so
+System.Net.Http.dll
+System.Net.HttpListener.dll
+System.Net.Mail.dll
+System.Net.NameResolution.dll
+System.Net.NetworkInformation.dll
+System.Net.Ping.dll
+System.Net.Primitives.dll
+System.Net.Requests.dll
+System.Net.Security.Native.a
+System.Net.Security.Native.so
+System.Net.Security.dll
+System.Net.ServicePoint.dll
+System.Net.Sockets.dll
+System.Net.WebClient.dll
+System.Net.WebHeaderCollection.dll
+System.Net.WebProxy.dll
+System.Net.WebSockets.Client.dll
+System.Net.WebSockets.dll
+System.Net.dll
+System.Numerics.Vectors.dll
+System.Numerics.dll
+System.ObjectModel.dll
+System.Private.CoreLib.dll
+System.Private.DataContractSerialization.dll
+System.Private.Uri.dll
+System.Private.Xml.Linq.dll
+System.Private.Xml.dll
+System.Reflection.DispatchProxy.dll
+System.Reflection.Emit.ILGeneration.dll
+System.Reflection.Emit.Lightweight.dll
+System.Reflection.Emit.dll
+System.Reflection.Extensions.dll
+System.Reflection.Metadata.dll
+System.Reflection.Primitives.dll
+System.Reflection.TypeExtensions.dll
+System.Reflection.dll
+System.Resources.Reader.dll
+System.Resources.ResourceManager.dll
+System.Resources.Writer.dll
+System.Runtime.CompilerServices.VisualC.dll
+System.Runtime.Extensions.dll
+System.Runtime.Handles.dll
+System.Runtime.InteropServices.RuntimeInformation.dll
+System.Runtime.InteropServices.WindowsRuntime.dll
+System.Runtime.InteropServices.dll
+System.Runtime.Loader.dll
+System.Runtime.Numerics.dll
+System.Runtime.Serialization.Formatters.dll
+System.Runtime.Serialization.Json.dll
+System.Runtime.Serialization.Primitives.dll
+System.Runtime.Serialization.Xml.dll
+System.Runtime.Serialization.dll
+System.Runtime.dll
+System.Security.AccessControl.dll
+System.Security.Claims.dll
+System.Security.Cryptography.Algorithms.dll
+System.Security.Cryptography.Cng.dll
+System.Security.Cryptography.Csp.dll
+System.Security.Cryptography.Encoding.dll
+System.Security.Cryptography.Native.OpenSsl.a
+System.Security.Cryptography.Native.OpenSsl.so
+System.Security.Cryptography.OpenSsl.dll
+System.Security.Cryptography.Primitives.dll
+System.Security.Cryptography.X509Certificates.dll
+System.Security.Principal.Windows.dll
+System.Security.Principal.dll
+System.Security.SecureString.dll
+System.Security.dll
+System.ServiceModel.Web.dll
+System.ServiceProcess.dll
+System.Text.Encoding.Extensions.dll
+System.Text.Encoding.dll
+System.Text.RegularExpressions.dll
+System.Threading.Overlapped.dll
+System.Threading.Tasks.Dataflow.dll
+System.Threading.Tasks.Extensions.dll
+System.Threading.Tasks.Parallel.dll
+System.Threading.Tasks.dll
+System.Threading.Thread.dll
+System.Threading.ThreadPool.dll
+System.Threading.Timer.dll
+System.Threading.dll
+System.Transactions.Local.dll
+System.Transactions.dll
+System.ValueTuple.dll
+System.Web.HttpUtility.dll
+System.Web.dll
+System.Windows.dll
+System.Xml.Linq.dll
+System.Xml.ReaderWriter.dll
+System.Xml.Serialization.dll
+System.Xml.XDocument.dll
+System.Xml.XPath.XDocument.dll
+System.Xml.XPath.dll
+System.Xml.XmlDocument.dll
+System.Xml.XmlSerializer.dll
+System.Xml.dll
+System.dll
+WindowsBase.dll
+cliscd
+cliscd.deps.json
+cliscd.dll
+cliscd.pdb
+cliscd.runtimeconfig.json
+createdump
+libclrjit.so
+libcoreclr.so
+libcoreclrtraceptprovider.so
+libdbgshim.so
+libhostfxr.so
+libhostpolicy.so
+libmscordaccore.so
+libmscordbi.so
+libsos.so
+libsosplugin.so
+mscorlib.dll
+netstandard.dll
+sosdocsunix.txt
+ls: cannot access '/etc/cliscd': No such file or directory
+ls: cannot access '/root/.cliscd': No such file or directory
diff --git a/demo/cliscd/ol.7-x64/Dockerfile b/demo/cliscd/ol.7-x64/Dockerfile
new file mode 100644
index 00000000..92978b5b
--- /dev/null
+++ b/demo/cliscd/ol.7-x64/Dockerfile
@@ -0,0 +1,17 @@
+FROM oraclelinux:7
+
+ENV rid=ol.7-x64
+
+COPY cliscd.1.0.0.$rid.rpm /pkg/
+COPY reference.txt /pkg/
+
+RUN yum update -y \
+&& yum install -y /pkg/cliscd.1.0.0.$rid.rpm
+
+RUN ls -a /usr/share/cliscd >> ~/testoutput.log 2>&1 || exit 0
+RUN ls -a /etc/cliscd >> ~/testoutput.log 2>&1 || exit 0
+RUN ls -a ~/.cliscd >> ~/testoutput.log 2>&1 || exit 0
+
+RUN diff -w /pkg/reference.txt ~/testoutput.log
+
+CMD [ "/usr/share/cliscd/cliscd" ]
diff --git a/demo/cliscd/ol.7-x64/reference.txt b/demo/cliscd/ol.7-x64/reference.txt
new file mode 100644
index 00000000..fddf788e
--- /dev/null
+++ b/demo/cliscd/ol.7-x64/reference.txt
@@ -0,0 +1,188 @@
+.
+..
+Microsoft.CSharp.dll
+Microsoft.VisualBasic.dll
+Microsoft.Win32.Primitives.dll
+Microsoft.Win32.Registry.dll
+SOS.NETCore.dll
+System.AppContext.dll
+System.Buffers.dll
+System.Collections.Concurrent.dll
+System.Collections.Immutable.dll
+System.Collections.NonGeneric.dll
+System.Collections.Specialized.dll
+System.Collections.dll
+System.ComponentModel.Annotations.dll
+System.ComponentModel.DataAnnotations.dll
+System.ComponentModel.EventBasedAsync.dll
+System.ComponentModel.Primitives.dll
+System.ComponentModel.TypeConverter.dll
+System.ComponentModel.dll
+System.Configuration.dll
+System.Console.dll
+System.Core.dll
+System.Data.Common.dll
+System.Data.dll
+System.Diagnostics.Contracts.dll
+System.Diagnostics.Debug.dll
+System.Diagnostics.DiagnosticSource.dll
+System.Diagnostics.FileVersionInfo.dll
+System.Diagnostics.Process.dll
+System.Diagnostics.StackTrace.dll
+System.Diagnostics.TextWriterTraceListener.dll
+System.Diagnostics.Tools.dll
+System.Diagnostics.TraceSource.dll
+System.Diagnostics.Tracing.dll
+System.Drawing.Primitives.dll
+System.Drawing.dll
+System.Dynamic.Runtime.dll
+System.Globalization.Calendars.dll
+System.Globalization.Extensions.dll
+System.Globalization.Native.so
+System.Globalization.dll
+System.IO.Compression.Brotli.dll
+System.IO.Compression.FileSystem.dll
+System.IO.Compression.Native.a
+System.IO.Compression.Native.so
+System.IO.Compression.ZipFile.dll
+System.IO.Compression.dll
+System.IO.FileSystem.AccessControl.dll
+System.IO.FileSystem.DriveInfo.dll
+System.IO.FileSystem.Primitives.dll
+System.IO.FileSystem.Watcher.dll
+System.IO.FileSystem.dll
+System.IO.IsolatedStorage.dll
+System.IO.MemoryMappedFiles.dll
+System.IO.Pipes.AccessControl.dll
+System.IO.Pipes.dll
+System.IO.UnmanagedMemoryStream.dll
+System.IO.dll
+System.Linq.Expressions.dll
+System.Linq.Parallel.dll
+System.Linq.Queryable.dll
+System.Linq.dll
+System.Memory.dll
+System.Native.a
+System.Native.so
+System.Net.Http.Native.a
+System.Net.Http.Native.so
+System.Net.Http.dll
+System.Net.HttpListener.dll
+System.Net.Mail.dll
+System.Net.NameResolution.dll
+System.Net.NetworkInformation.dll
+System.Net.Ping.dll
+System.Net.Primitives.dll
+System.Net.Requests.dll
+System.Net.Security.Native.a
+System.Net.Security.Native.so
+System.Net.Security.dll
+System.Net.ServicePoint.dll
+System.Net.Sockets.dll
+System.Net.WebClient.dll
+System.Net.WebHeaderCollection.dll
+System.Net.WebProxy.dll
+System.Net.WebSockets.Client.dll
+System.Net.WebSockets.dll
+System.Net.dll
+System.Numerics.Vectors.dll
+System.Numerics.dll
+System.ObjectModel.dll
+System.Private.CoreLib.dll
+System.Private.DataContractSerialization.dll
+System.Private.Uri.dll
+System.Private.Xml.Linq.dll
+System.Private.Xml.dll
+System.Reflection.DispatchProxy.dll
+System.Reflection.Emit.ILGeneration.dll
+System.Reflection.Emit.Lightweight.dll
+System.Reflection.Emit.dll
+System.Reflection.Extensions.dll
+System.Reflection.Metadata.dll
+System.Reflection.Primitives.dll
+System.Reflection.TypeExtensions.dll
+System.Reflection.dll
+System.Resources.Reader.dll
+System.Resources.ResourceManager.dll
+System.Resources.Writer.dll
+System.Runtime.CompilerServices.VisualC.dll
+System.Runtime.Extensions.dll
+System.Runtime.Handles.dll
+System.Runtime.InteropServices.RuntimeInformation.dll
+System.Runtime.InteropServices.WindowsRuntime.dll
+System.Runtime.InteropServices.dll
+System.Runtime.Loader.dll
+System.Runtime.Numerics.dll
+System.Runtime.Serialization.Formatters.dll
+System.Runtime.Serialization.Json.dll
+System.Runtime.Serialization.Primitives.dll
+System.Runtime.Serialization.Xml.dll
+System.Runtime.Serialization.dll
+System.Runtime.dll
+System.Security.AccessControl.dll
+System.Security.Claims.dll
+System.Security.Cryptography.Algorithms.dll
+System.Security.Cryptography.Cng.dll
+System.Security.Cryptography.Csp.dll
+System.Security.Cryptography.Encoding.dll
+System.Security.Cryptography.Native.OpenSsl.a
+System.Security.Cryptography.Native.OpenSsl.so
+System.Security.Cryptography.OpenSsl.dll
+System.Security.Cryptography.Primitives.dll
+System.Security.Cryptography.X509Certificates.dll
+System.Security.Principal.Windows.dll
+System.Security.Principal.dll
+System.Security.SecureString.dll
+System.Security.dll
+System.ServiceModel.Web.dll
+System.ServiceProcess.dll
+System.Text.Encoding.Extensions.dll
+System.Text.Encoding.dll
+System.Text.RegularExpressions.dll
+System.Threading.Overlapped.dll
+System.Threading.Tasks.Dataflow.dll
+System.Threading.Tasks.Extensions.dll
+System.Threading.Tasks.Parallel.dll
+System.Threading.Tasks.dll
+System.Threading.Thread.dll
+System.Threading.ThreadPool.dll
+System.Threading.Timer.dll
+System.Threading.dll
+System.Transactions.Local.dll
+System.Transactions.dll
+System.ValueTuple.dll
+System.Web.HttpUtility.dll
+System.Web.dll
+System.Windows.dll
+System.Xml.Linq.dll
+System.Xml.ReaderWriter.dll
+System.Xml.Serialization.dll
+System.Xml.XDocument.dll
+System.Xml.XPath.XDocument.dll
+System.Xml.XPath.dll
+System.Xml.XmlDocument.dll
+System.Xml.XmlSerializer.dll
+System.Xml.dll
+System.dll
+WindowsBase.dll
+cliscd
+cliscd.deps.json
+cliscd.dll
+cliscd.pdb
+cliscd.runtimeconfig.json
+createdump
+libclrjit.so
+libcoreclr.so
+libcoreclrtraceptprovider.so
+libdbgshim.so
+libhostfxr.so
+libhostpolicy.so
+libmscordaccore.so
+libmscordbi.so
+libsos.so
+libsosplugin.so
+mscorlib.dll
+netstandard.dll
+sosdocsunix.txt
+ls: cannot access /etc/cliscd: No such file or directory
+ls: cannot access /root/.cliscd: No such file or directory
diff --git a/demo/cliscd/opensuse.42.3-x64/Dockerfile b/demo/cliscd/opensuse.42.3-x64/Dockerfile
new file mode 100644
index 00000000..a299d9df
--- /dev/null
+++ b/demo/cliscd/opensuse.42.3-x64/Dockerfile
@@ -0,0 +1,15 @@
+FROM opensuse:42.3
+
+ENV rid=opensuse.42.3-x64
+COPY cliscd.1.0.0.$rid.rpm /pkg/
+COPY reference.txt /pkg/
+
+RUN zypper --non-interactive --no-gpg-checks install /pkg/cliscd.1.0.0.$rid.rpm
+
+RUN ls -a /usr/share/cliscd >> ~/testoutput.log 2>&1 || exit 0
+RUN ls -a /etc/cliscd >> ~/testoutput.log 2>&1 || exit 0
+RUN ls -a ~/.cliscd >> ~/testoutput.log 2>&1 || exit 0
+
+RUN diff -w /pkg/reference.txt ~/testoutput.log
+
+CMD [ "/usr/share/cliscd/cliscd" ]
diff --git a/demo/cliscd/opensuse.42.3-x64/reference.txt b/demo/cliscd/opensuse.42.3-x64/reference.txt
new file mode 100644
index 00000000..83cb79c4
--- /dev/null
+++ b/demo/cliscd/opensuse.42.3-x64/reference.txt
@@ -0,0 +1,188 @@
+.
+..
+Microsoft.CSharp.dll
+Microsoft.VisualBasic.dll
+Microsoft.Win32.Primitives.dll
+Microsoft.Win32.Registry.dll
+SOS.NETCore.dll
+System.AppContext.dll
+System.Buffers.dll
+System.Collections.Concurrent.dll
+System.Collections.Immutable.dll
+System.Collections.NonGeneric.dll
+System.Collections.Specialized.dll
+System.Collections.dll
+System.ComponentModel.Annotations.dll
+System.ComponentModel.DataAnnotations.dll
+System.ComponentModel.EventBasedAsync.dll
+System.ComponentModel.Primitives.dll
+System.ComponentModel.TypeConverter.dll
+System.ComponentModel.dll
+System.Configuration.dll
+System.Console.dll
+System.Core.dll
+System.Data.Common.dll
+System.Data.dll
+System.Diagnostics.Contracts.dll
+System.Diagnostics.Debug.dll
+System.Diagnostics.DiagnosticSource.dll
+System.Diagnostics.FileVersionInfo.dll
+System.Diagnostics.Process.dll
+System.Diagnostics.StackTrace.dll
+System.Diagnostics.TextWriterTraceListener.dll
+System.Diagnostics.Tools.dll
+System.Diagnostics.TraceSource.dll
+System.Diagnostics.Tracing.dll
+System.Drawing.Primitives.dll
+System.Drawing.dll
+System.Dynamic.Runtime.dll
+System.Globalization.Calendars.dll
+System.Globalization.Extensions.dll
+System.Globalization.Native.so
+System.Globalization.dll
+System.IO.Compression.Brotli.dll
+System.IO.Compression.FileSystem.dll
+System.IO.Compression.Native.a
+System.IO.Compression.Native.so
+System.IO.Compression.ZipFile.dll
+System.IO.Compression.dll
+System.IO.FileSystem.AccessControl.dll
+System.IO.FileSystem.DriveInfo.dll
+System.IO.FileSystem.Primitives.dll
+System.IO.FileSystem.Watcher.dll
+System.IO.FileSystem.dll
+System.IO.IsolatedStorage.dll
+System.IO.MemoryMappedFiles.dll
+System.IO.Pipes.AccessControl.dll
+System.IO.Pipes.dll
+System.IO.UnmanagedMemoryStream.dll
+System.IO.dll
+System.Linq.Expressions.dll
+System.Linq.Parallel.dll
+System.Linq.Queryable.dll
+System.Linq.dll
+System.Memory.dll
+System.Native.a
+System.Native.so
+System.Net.Http.Native.a
+System.Net.Http.Native.so
+System.Net.Http.dll
+System.Net.HttpListener.dll
+System.Net.Mail.dll
+System.Net.NameResolution.dll
+System.Net.NetworkInformation.dll
+System.Net.Ping.dll
+System.Net.Primitives.dll
+System.Net.Requests.dll
+System.Net.Security.Native.a
+System.Net.Security.Native.so
+System.Net.Security.dll
+System.Net.ServicePoint.dll
+System.Net.Sockets.dll
+System.Net.WebClient.dll
+System.Net.WebHeaderCollection.dll
+System.Net.WebProxy.dll
+System.Net.WebSockets.Client.dll
+System.Net.WebSockets.dll
+System.Net.dll
+System.Numerics.Vectors.dll
+System.Numerics.dll
+System.ObjectModel.dll
+System.Private.CoreLib.dll
+System.Private.DataContractSerialization.dll
+System.Private.Uri.dll
+System.Private.Xml.Linq.dll
+System.Private.Xml.dll
+System.Reflection.DispatchProxy.dll
+System.Reflection.Emit.ILGeneration.dll
+System.Reflection.Emit.Lightweight.dll
+System.Reflection.Emit.dll
+System.Reflection.Extensions.dll
+System.Reflection.Metadata.dll
+System.Reflection.Primitives.dll
+System.Reflection.TypeExtensions.dll
+System.Reflection.dll
+System.Resources.Reader.dll
+System.Resources.ResourceManager.dll
+System.Resources.Writer.dll
+System.Runtime.CompilerServices.VisualC.dll
+System.Runtime.Extensions.dll
+System.Runtime.Handles.dll
+System.Runtime.InteropServices.RuntimeInformation.dll
+System.Runtime.InteropServices.WindowsRuntime.dll
+System.Runtime.InteropServices.dll
+System.Runtime.Loader.dll
+System.Runtime.Numerics.dll
+System.Runtime.Serialization.Formatters.dll
+System.Runtime.Serialization.Json.dll
+System.Runtime.Serialization.Primitives.dll
+System.Runtime.Serialization.Xml.dll
+System.Runtime.Serialization.dll
+System.Runtime.dll
+System.Security.AccessControl.dll
+System.Security.Claims.dll
+System.Security.Cryptography.Algorithms.dll
+System.Security.Cryptography.Cng.dll
+System.Security.Cryptography.Csp.dll
+System.Security.Cryptography.Encoding.dll
+System.Security.Cryptography.Native.OpenSsl.a
+System.Security.Cryptography.Native.OpenSsl.so
+System.Security.Cryptography.OpenSsl.dll
+System.Security.Cryptography.Primitives.dll
+System.Security.Cryptography.X509Certificates.dll
+System.Security.Principal.Windows.dll
+System.Security.Principal.dll
+System.Security.SecureString.dll
+System.Security.dll
+System.ServiceModel.Web.dll
+System.ServiceProcess.dll
+System.Text.Encoding.Extensions.dll
+System.Text.Encoding.dll
+System.Text.RegularExpressions.dll
+System.Threading.Overlapped.dll
+System.Threading.Tasks.Dataflow.dll
+System.Threading.Tasks.Extensions.dll
+System.Threading.Tasks.Parallel.dll
+System.Threading.Tasks.dll
+System.Threading.Thread.dll
+System.Threading.ThreadPool.dll
+System.Threading.Timer.dll
+System.Threading.dll
+System.Transactions.Local.dll
+System.Transactions.dll
+System.ValueTuple.dll
+System.Web.HttpUtility.dll
+System.Web.dll
+System.Windows.dll
+System.Xml.Linq.dll
+System.Xml.ReaderWriter.dll
+System.Xml.Serialization.dll
+System.Xml.XDocument.dll
+System.Xml.XPath.XDocument.dll
+System.Xml.XPath.dll
+System.Xml.XmlDocument.dll
+System.Xml.XmlSerializer.dll
+System.Xml.dll
+System.dll
+WindowsBase.dll
+cliscd
+cliscd.deps.json
+cliscd.dll
+cliscd.pdb
+cliscd.runtimeconfig.json
+createdump
+libclrjit.so
+libcoreclr.so
+libcoreclrtraceptprovider.so
+libdbgshim.so
+libhostfxr.so
+libhostpolicy.so
+libmscordaccore.so
+libmscordbi.so
+libsos.so
+libsosplugin.so
+mscorlib.dll
+netstandard.dll
+sosdocsunix.txt
+ls: cannot access '/etc/cliscd': No such file or directory
+ls: cannot access '/root/.cliscd': No such file or directory
diff --git a/demo/cliscd/readme.txt b/demo/cliscd/readme.txt
new file mode 100644
index 00000000..1045cf25
--- /dev/null
+++ b/demo/cliscd/readme.txt
@@ -0,0 +1 @@
+Test Test
\ No newline at end of file
diff --git a/demo/cliscd/run-tests.sh b/demo/cliscd/run-tests.sh
new file mode 100755
index 00000000..1177f8c8
--- /dev/null
+++ b/demo/cliscd/run-tests.sh
@@ -0,0 +1,44 @@
+#!/bin/bash
+set -e
+
+usage()
+{
+ echo "Usage: $0 -r [rid]"
+}
+
+while getopts "h?r:" opt; do
+ case "$opt" in
+ h|\?)
+ usage
+ exit 0
+ ;;
+ r) rid=$OPTARG
+ ;;
+ esac
+done
+
+echo Packaging for $rid
+format=x
+
+if [[ $rid == rhel* ]] || [[ $rid == centos* ]] || [[ $rid == ol* ]] || [[ $rid == fedora* ]] || [[ $rid == opensuse* ]] || [[ $rid == sles* ]] ;
+then
+ echo Packaging as RPM
+ format=rpm
+fi
+
+if [[ $rid == debian* ]] || [[ $rid == ubuntu* ]] || [[ $rid == linuxmint* ]] ;
+then
+ echo Packaging as deb
+ format=deb
+fi
+
+if [[ $rid == alpine* ]] ;
+then
+ echo Alpine Linux is not supported
+ exit 0
+fi
+
+dotnet $format -c Release -r $rid -f netcoreapp2.1
+cp bin/Release/netcoreapp2.1/$rid/cliscd.1.0.0.$rid.$format $rid
+sudo docker build -t clisc:$rid $rid
+sudo docker run clisc:$rid
diff --git a/demo/cliscd/ubuntu.14.04-x64/Dockerfile b/demo/cliscd/ubuntu.14.04-x64/Dockerfile
new file mode 100644
index 00000000..113be866
--- /dev/null
+++ b/demo/cliscd/ubuntu.14.04-x64/Dockerfile
@@ -0,0 +1,16 @@
+FROM ubuntu:14.04
+
+ENV rid=ubuntu.14.04-x64
+COPY cliscd.1.0.0.$rid.deb /pkg/
+COPY reference.txt /pkg/
+
+RUN apt-get update \
+&& dpkg -i /pkg/cliscd.1.0.0.$rid.deb || apt-get install -f -y
+
+RUN ls -a /usr/share/cliscd >> ~/testoutput.log 2>&1 || exit 0
+RUN ls -a /etc/cliscd >> ~/testoutput.log 2>&1 || exit 0
+RUN ls -a ~/.cliscd >> ~/testoutput.log 2>&1 || exit 0
+
+RUN diff -w /pkg/reference.txt ~/testoutput.log
+
+CMD [ "/usr/share/cliscd/cliscd" ]
diff --git a/demo/cliscd/ubuntu.14.04-x64/reference.txt b/demo/cliscd/ubuntu.14.04-x64/reference.txt
new file mode 100644
index 00000000..fddf788e
--- /dev/null
+++ b/demo/cliscd/ubuntu.14.04-x64/reference.txt
@@ -0,0 +1,188 @@
+.
+..
+Microsoft.CSharp.dll
+Microsoft.VisualBasic.dll
+Microsoft.Win32.Primitives.dll
+Microsoft.Win32.Registry.dll
+SOS.NETCore.dll
+System.AppContext.dll
+System.Buffers.dll
+System.Collections.Concurrent.dll
+System.Collections.Immutable.dll
+System.Collections.NonGeneric.dll
+System.Collections.Specialized.dll
+System.Collections.dll
+System.ComponentModel.Annotations.dll
+System.ComponentModel.DataAnnotations.dll
+System.ComponentModel.EventBasedAsync.dll
+System.ComponentModel.Primitives.dll
+System.ComponentModel.TypeConverter.dll
+System.ComponentModel.dll
+System.Configuration.dll
+System.Console.dll
+System.Core.dll
+System.Data.Common.dll
+System.Data.dll
+System.Diagnostics.Contracts.dll
+System.Diagnostics.Debug.dll
+System.Diagnostics.DiagnosticSource.dll
+System.Diagnostics.FileVersionInfo.dll
+System.Diagnostics.Process.dll
+System.Diagnostics.StackTrace.dll
+System.Diagnostics.TextWriterTraceListener.dll
+System.Diagnostics.Tools.dll
+System.Diagnostics.TraceSource.dll
+System.Diagnostics.Tracing.dll
+System.Drawing.Primitives.dll
+System.Drawing.dll
+System.Dynamic.Runtime.dll
+System.Globalization.Calendars.dll
+System.Globalization.Extensions.dll
+System.Globalization.Native.so
+System.Globalization.dll
+System.IO.Compression.Brotli.dll
+System.IO.Compression.FileSystem.dll
+System.IO.Compression.Native.a
+System.IO.Compression.Native.so
+System.IO.Compression.ZipFile.dll
+System.IO.Compression.dll
+System.IO.FileSystem.AccessControl.dll
+System.IO.FileSystem.DriveInfo.dll
+System.IO.FileSystem.Primitives.dll
+System.IO.FileSystem.Watcher.dll
+System.IO.FileSystem.dll
+System.IO.IsolatedStorage.dll
+System.IO.MemoryMappedFiles.dll
+System.IO.Pipes.AccessControl.dll
+System.IO.Pipes.dll
+System.IO.UnmanagedMemoryStream.dll
+System.IO.dll
+System.Linq.Expressions.dll
+System.Linq.Parallel.dll
+System.Linq.Queryable.dll
+System.Linq.dll
+System.Memory.dll
+System.Native.a
+System.Native.so
+System.Net.Http.Native.a
+System.Net.Http.Native.so
+System.Net.Http.dll
+System.Net.HttpListener.dll
+System.Net.Mail.dll
+System.Net.NameResolution.dll
+System.Net.NetworkInformation.dll
+System.Net.Ping.dll
+System.Net.Primitives.dll
+System.Net.Requests.dll
+System.Net.Security.Native.a
+System.Net.Security.Native.so
+System.Net.Security.dll
+System.Net.ServicePoint.dll
+System.Net.Sockets.dll
+System.Net.WebClient.dll
+System.Net.WebHeaderCollection.dll
+System.Net.WebProxy.dll
+System.Net.WebSockets.Client.dll
+System.Net.WebSockets.dll
+System.Net.dll
+System.Numerics.Vectors.dll
+System.Numerics.dll
+System.ObjectModel.dll
+System.Private.CoreLib.dll
+System.Private.DataContractSerialization.dll
+System.Private.Uri.dll
+System.Private.Xml.Linq.dll
+System.Private.Xml.dll
+System.Reflection.DispatchProxy.dll
+System.Reflection.Emit.ILGeneration.dll
+System.Reflection.Emit.Lightweight.dll
+System.Reflection.Emit.dll
+System.Reflection.Extensions.dll
+System.Reflection.Metadata.dll
+System.Reflection.Primitives.dll
+System.Reflection.TypeExtensions.dll
+System.Reflection.dll
+System.Resources.Reader.dll
+System.Resources.ResourceManager.dll
+System.Resources.Writer.dll
+System.Runtime.CompilerServices.VisualC.dll
+System.Runtime.Extensions.dll
+System.Runtime.Handles.dll
+System.Runtime.InteropServices.RuntimeInformation.dll
+System.Runtime.InteropServices.WindowsRuntime.dll
+System.Runtime.InteropServices.dll
+System.Runtime.Loader.dll
+System.Runtime.Numerics.dll
+System.Runtime.Serialization.Formatters.dll
+System.Runtime.Serialization.Json.dll
+System.Runtime.Serialization.Primitives.dll
+System.Runtime.Serialization.Xml.dll
+System.Runtime.Serialization.dll
+System.Runtime.dll
+System.Security.AccessControl.dll
+System.Security.Claims.dll
+System.Security.Cryptography.Algorithms.dll
+System.Security.Cryptography.Cng.dll
+System.Security.Cryptography.Csp.dll
+System.Security.Cryptography.Encoding.dll
+System.Security.Cryptography.Native.OpenSsl.a
+System.Security.Cryptography.Native.OpenSsl.so
+System.Security.Cryptography.OpenSsl.dll
+System.Security.Cryptography.Primitives.dll
+System.Security.Cryptography.X509Certificates.dll
+System.Security.Principal.Windows.dll
+System.Security.Principal.dll
+System.Security.SecureString.dll
+System.Security.dll
+System.ServiceModel.Web.dll
+System.ServiceProcess.dll
+System.Text.Encoding.Extensions.dll
+System.Text.Encoding.dll
+System.Text.RegularExpressions.dll
+System.Threading.Overlapped.dll
+System.Threading.Tasks.Dataflow.dll
+System.Threading.Tasks.Extensions.dll
+System.Threading.Tasks.Parallel.dll
+System.Threading.Tasks.dll
+System.Threading.Thread.dll
+System.Threading.ThreadPool.dll
+System.Threading.Timer.dll
+System.Threading.dll
+System.Transactions.Local.dll
+System.Transactions.dll
+System.ValueTuple.dll
+System.Web.HttpUtility.dll
+System.Web.dll
+System.Windows.dll
+System.Xml.Linq.dll
+System.Xml.ReaderWriter.dll
+System.Xml.Serialization.dll
+System.Xml.XDocument.dll
+System.Xml.XPath.XDocument.dll
+System.Xml.XPath.dll
+System.Xml.XmlDocument.dll
+System.Xml.XmlSerializer.dll
+System.Xml.dll
+System.dll
+WindowsBase.dll
+cliscd
+cliscd.deps.json
+cliscd.dll
+cliscd.pdb
+cliscd.runtimeconfig.json
+createdump
+libclrjit.so
+libcoreclr.so
+libcoreclrtraceptprovider.so
+libdbgshim.so
+libhostfxr.so
+libhostpolicy.so
+libmscordaccore.so
+libmscordbi.so
+libsos.so
+libsosplugin.so
+mscorlib.dll
+netstandard.dll
+sosdocsunix.txt
+ls: cannot access /etc/cliscd: No such file or directory
+ls: cannot access /root/.cliscd: No such file or directory
diff --git a/demo/cliscd/ubuntu.16.04-x64/Dockerfile b/demo/cliscd/ubuntu.16.04-x64/Dockerfile
new file mode 100644
index 00000000..68262d04
--- /dev/null
+++ b/demo/cliscd/ubuntu.16.04-x64/Dockerfile
@@ -0,0 +1,16 @@
+FROM ubuntu:16.04
+
+ENV rid=ubuntu.16.04-x64
+COPY cliscd.1.0.0.$rid.deb /pkg/
+COPY reference.txt /pkg/
+
+RUN apt-get update \
+&& apt install -y /pkg/cliscd.1.0.0.$rid.deb
+
+RUN ls -a /usr/share/cliscd >> ~/testoutput.log 2>&1 || exit 0
+RUN ls -a /etc/cliscd >> ~/testoutput.log 2>&1 || exit 0
+RUN ls -a ~/.cliscd >> ~/testoutput.log 2>&1 || exit 0
+
+RUN diff -w /pkg/reference.txt ~/testoutput.log
+
+CMD [ "/usr/share/cliscd/cliscd" ]
diff --git a/demo/cliscd/ubuntu.16.04-x64/reference.txt b/demo/cliscd/ubuntu.16.04-x64/reference.txt
new file mode 100644
index 00000000..83cb79c4
--- /dev/null
+++ b/demo/cliscd/ubuntu.16.04-x64/reference.txt
@@ -0,0 +1,188 @@
+.
+..
+Microsoft.CSharp.dll
+Microsoft.VisualBasic.dll
+Microsoft.Win32.Primitives.dll
+Microsoft.Win32.Registry.dll
+SOS.NETCore.dll
+System.AppContext.dll
+System.Buffers.dll
+System.Collections.Concurrent.dll
+System.Collections.Immutable.dll
+System.Collections.NonGeneric.dll
+System.Collections.Specialized.dll
+System.Collections.dll
+System.ComponentModel.Annotations.dll
+System.ComponentModel.DataAnnotations.dll
+System.ComponentModel.EventBasedAsync.dll
+System.ComponentModel.Primitives.dll
+System.ComponentModel.TypeConverter.dll
+System.ComponentModel.dll
+System.Configuration.dll
+System.Console.dll
+System.Core.dll
+System.Data.Common.dll
+System.Data.dll
+System.Diagnostics.Contracts.dll
+System.Diagnostics.Debug.dll
+System.Diagnostics.DiagnosticSource.dll
+System.Diagnostics.FileVersionInfo.dll
+System.Diagnostics.Process.dll
+System.Diagnostics.StackTrace.dll
+System.Diagnostics.TextWriterTraceListener.dll
+System.Diagnostics.Tools.dll
+System.Diagnostics.TraceSource.dll
+System.Diagnostics.Tracing.dll
+System.Drawing.Primitives.dll
+System.Drawing.dll
+System.Dynamic.Runtime.dll
+System.Globalization.Calendars.dll
+System.Globalization.Extensions.dll
+System.Globalization.Native.so
+System.Globalization.dll
+System.IO.Compression.Brotli.dll
+System.IO.Compression.FileSystem.dll
+System.IO.Compression.Native.a
+System.IO.Compression.Native.so
+System.IO.Compression.ZipFile.dll
+System.IO.Compression.dll
+System.IO.FileSystem.AccessControl.dll
+System.IO.FileSystem.DriveInfo.dll
+System.IO.FileSystem.Primitives.dll
+System.IO.FileSystem.Watcher.dll
+System.IO.FileSystem.dll
+System.IO.IsolatedStorage.dll
+System.IO.MemoryMappedFiles.dll
+System.IO.Pipes.AccessControl.dll
+System.IO.Pipes.dll
+System.IO.UnmanagedMemoryStream.dll
+System.IO.dll
+System.Linq.Expressions.dll
+System.Linq.Parallel.dll
+System.Linq.Queryable.dll
+System.Linq.dll
+System.Memory.dll
+System.Native.a
+System.Native.so
+System.Net.Http.Native.a
+System.Net.Http.Native.so
+System.Net.Http.dll
+System.Net.HttpListener.dll
+System.Net.Mail.dll
+System.Net.NameResolution.dll
+System.Net.NetworkInformation.dll
+System.Net.Ping.dll
+System.Net.Primitives.dll
+System.Net.Requests.dll
+System.Net.Security.Native.a
+System.Net.Security.Native.so
+System.Net.Security.dll
+System.Net.ServicePoint.dll
+System.Net.Sockets.dll
+System.Net.WebClient.dll
+System.Net.WebHeaderCollection.dll
+System.Net.WebProxy.dll
+System.Net.WebSockets.Client.dll
+System.Net.WebSockets.dll
+System.Net.dll
+System.Numerics.Vectors.dll
+System.Numerics.dll
+System.ObjectModel.dll
+System.Private.CoreLib.dll
+System.Private.DataContractSerialization.dll
+System.Private.Uri.dll
+System.Private.Xml.Linq.dll
+System.Private.Xml.dll
+System.Reflection.DispatchProxy.dll
+System.Reflection.Emit.ILGeneration.dll
+System.Reflection.Emit.Lightweight.dll
+System.Reflection.Emit.dll
+System.Reflection.Extensions.dll
+System.Reflection.Metadata.dll
+System.Reflection.Primitives.dll
+System.Reflection.TypeExtensions.dll
+System.Reflection.dll
+System.Resources.Reader.dll
+System.Resources.ResourceManager.dll
+System.Resources.Writer.dll
+System.Runtime.CompilerServices.VisualC.dll
+System.Runtime.Extensions.dll
+System.Runtime.Handles.dll
+System.Runtime.InteropServices.RuntimeInformation.dll
+System.Runtime.InteropServices.WindowsRuntime.dll
+System.Runtime.InteropServices.dll
+System.Runtime.Loader.dll
+System.Runtime.Numerics.dll
+System.Runtime.Serialization.Formatters.dll
+System.Runtime.Serialization.Json.dll
+System.Runtime.Serialization.Primitives.dll
+System.Runtime.Serialization.Xml.dll
+System.Runtime.Serialization.dll
+System.Runtime.dll
+System.Security.AccessControl.dll
+System.Security.Claims.dll
+System.Security.Cryptography.Algorithms.dll
+System.Security.Cryptography.Cng.dll
+System.Security.Cryptography.Csp.dll
+System.Security.Cryptography.Encoding.dll
+System.Security.Cryptography.Native.OpenSsl.a
+System.Security.Cryptography.Native.OpenSsl.so
+System.Security.Cryptography.OpenSsl.dll
+System.Security.Cryptography.Primitives.dll
+System.Security.Cryptography.X509Certificates.dll
+System.Security.Principal.Windows.dll
+System.Security.Principal.dll
+System.Security.SecureString.dll
+System.Security.dll
+System.ServiceModel.Web.dll
+System.ServiceProcess.dll
+System.Text.Encoding.Extensions.dll
+System.Text.Encoding.dll
+System.Text.RegularExpressions.dll
+System.Threading.Overlapped.dll
+System.Threading.Tasks.Dataflow.dll
+System.Threading.Tasks.Extensions.dll
+System.Threading.Tasks.Parallel.dll
+System.Threading.Tasks.dll
+System.Threading.Thread.dll
+System.Threading.ThreadPool.dll
+System.Threading.Timer.dll
+System.Threading.dll
+System.Transactions.Local.dll
+System.Transactions.dll
+System.ValueTuple.dll
+System.Web.HttpUtility.dll
+System.Web.dll
+System.Windows.dll
+System.Xml.Linq.dll
+System.Xml.ReaderWriter.dll
+System.Xml.Serialization.dll
+System.Xml.XDocument.dll
+System.Xml.XPath.XDocument.dll
+System.Xml.XPath.dll
+System.Xml.XmlDocument.dll
+System.Xml.XmlSerializer.dll
+System.Xml.dll
+System.dll
+WindowsBase.dll
+cliscd
+cliscd.deps.json
+cliscd.dll
+cliscd.pdb
+cliscd.runtimeconfig.json
+createdump
+libclrjit.so
+libcoreclr.so
+libcoreclrtraceptprovider.so
+libdbgshim.so
+libhostfxr.so
+libhostpolicy.so
+libmscordaccore.so
+libmscordbi.so
+libsos.so
+libsosplugin.so
+mscorlib.dll
+netstandard.dll
+sosdocsunix.txt
+ls: cannot access '/etc/cliscd': No such file or directory
+ls: cannot access '/root/.cliscd': No such file or directory
diff --git a/demo/cliscd/ubuntu.18.04-x64/Dockerfile b/demo/cliscd/ubuntu.18.04-x64/Dockerfile
new file mode 100644
index 00000000..bc744879
--- /dev/null
+++ b/demo/cliscd/ubuntu.18.04-x64/Dockerfile
@@ -0,0 +1,16 @@
+FROM ubuntu:18.04
+
+ENV rid=ubuntu.18.04-x64
+COPY cliscd.1.0.0.$rid.deb /pkg/
+COPY reference.txt /pkg/
+
+RUN apt-get update \
+&& apt install -y /pkg/cliscd.1.0.0.$rid.deb
+
+RUN ls -a /usr/share/cliscd >> ~/testoutput.log 2>&1 || exit 0
+RUN ls -a /etc/cliscd >> ~/testoutput.log 2>&1 || exit 0
+RUN ls -a ~/.cliscd >> ~/testoutput.log 2>&1 || exit 0
+
+RUN diff -w /pkg/reference.txt ~/testoutput.log
+
+CMD [ "/usr/share/cliscd/cliscd" ]
diff --git a/demo/cliscd/ubuntu.18.04-x64/reference.txt b/demo/cliscd/ubuntu.18.04-x64/reference.txt
new file mode 100644
index 00000000..83cb79c4
--- /dev/null
+++ b/demo/cliscd/ubuntu.18.04-x64/reference.txt
@@ -0,0 +1,188 @@
+.
+..
+Microsoft.CSharp.dll
+Microsoft.VisualBasic.dll
+Microsoft.Win32.Primitives.dll
+Microsoft.Win32.Registry.dll
+SOS.NETCore.dll
+System.AppContext.dll
+System.Buffers.dll
+System.Collections.Concurrent.dll
+System.Collections.Immutable.dll
+System.Collections.NonGeneric.dll
+System.Collections.Specialized.dll
+System.Collections.dll
+System.ComponentModel.Annotations.dll
+System.ComponentModel.DataAnnotations.dll
+System.ComponentModel.EventBasedAsync.dll
+System.ComponentModel.Primitives.dll
+System.ComponentModel.TypeConverter.dll
+System.ComponentModel.dll
+System.Configuration.dll
+System.Console.dll
+System.Core.dll
+System.Data.Common.dll
+System.Data.dll
+System.Diagnostics.Contracts.dll
+System.Diagnostics.Debug.dll
+System.Diagnostics.DiagnosticSource.dll
+System.Diagnostics.FileVersionInfo.dll
+System.Diagnostics.Process.dll
+System.Diagnostics.StackTrace.dll
+System.Diagnostics.TextWriterTraceListener.dll
+System.Diagnostics.Tools.dll
+System.Diagnostics.TraceSource.dll
+System.Diagnostics.Tracing.dll
+System.Drawing.Primitives.dll
+System.Drawing.dll
+System.Dynamic.Runtime.dll
+System.Globalization.Calendars.dll
+System.Globalization.Extensions.dll
+System.Globalization.Native.so
+System.Globalization.dll
+System.IO.Compression.Brotli.dll
+System.IO.Compression.FileSystem.dll
+System.IO.Compression.Native.a
+System.IO.Compression.Native.so
+System.IO.Compression.ZipFile.dll
+System.IO.Compression.dll
+System.IO.FileSystem.AccessControl.dll
+System.IO.FileSystem.DriveInfo.dll
+System.IO.FileSystem.Primitives.dll
+System.IO.FileSystem.Watcher.dll
+System.IO.FileSystem.dll
+System.IO.IsolatedStorage.dll
+System.IO.MemoryMappedFiles.dll
+System.IO.Pipes.AccessControl.dll
+System.IO.Pipes.dll
+System.IO.UnmanagedMemoryStream.dll
+System.IO.dll
+System.Linq.Expressions.dll
+System.Linq.Parallel.dll
+System.Linq.Queryable.dll
+System.Linq.dll
+System.Memory.dll
+System.Native.a
+System.Native.so
+System.Net.Http.Native.a
+System.Net.Http.Native.so
+System.Net.Http.dll
+System.Net.HttpListener.dll
+System.Net.Mail.dll
+System.Net.NameResolution.dll
+System.Net.NetworkInformation.dll
+System.Net.Ping.dll
+System.Net.Primitives.dll
+System.Net.Requests.dll
+System.Net.Security.Native.a
+System.Net.Security.Native.so
+System.Net.Security.dll
+System.Net.ServicePoint.dll
+System.Net.Sockets.dll
+System.Net.WebClient.dll
+System.Net.WebHeaderCollection.dll
+System.Net.WebProxy.dll
+System.Net.WebSockets.Client.dll
+System.Net.WebSockets.dll
+System.Net.dll
+System.Numerics.Vectors.dll
+System.Numerics.dll
+System.ObjectModel.dll
+System.Private.CoreLib.dll
+System.Private.DataContractSerialization.dll
+System.Private.Uri.dll
+System.Private.Xml.Linq.dll
+System.Private.Xml.dll
+System.Reflection.DispatchProxy.dll
+System.Reflection.Emit.ILGeneration.dll
+System.Reflection.Emit.Lightweight.dll
+System.Reflection.Emit.dll
+System.Reflection.Extensions.dll
+System.Reflection.Metadata.dll
+System.Reflection.Primitives.dll
+System.Reflection.TypeExtensions.dll
+System.Reflection.dll
+System.Resources.Reader.dll
+System.Resources.ResourceManager.dll
+System.Resources.Writer.dll
+System.Runtime.CompilerServices.VisualC.dll
+System.Runtime.Extensions.dll
+System.Runtime.Handles.dll
+System.Runtime.InteropServices.RuntimeInformation.dll
+System.Runtime.InteropServices.WindowsRuntime.dll
+System.Runtime.InteropServices.dll
+System.Runtime.Loader.dll
+System.Runtime.Numerics.dll
+System.Runtime.Serialization.Formatters.dll
+System.Runtime.Serialization.Json.dll
+System.Runtime.Serialization.Primitives.dll
+System.Runtime.Serialization.Xml.dll
+System.Runtime.Serialization.dll
+System.Runtime.dll
+System.Security.AccessControl.dll
+System.Security.Claims.dll
+System.Security.Cryptography.Algorithms.dll
+System.Security.Cryptography.Cng.dll
+System.Security.Cryptography.Csp.dll
+System.Security.Cryptography.Encoding.dll
+System.Security.Cryptography.Native.OpenSsl.a
+System.Security.Cryptography.Native.OpenSsl.so
+System.Security.Cryptography.OpenSsl.dll
+System.Security.Cryptography.Primitives.dll
+System.Security.Cryptography.X509Certificates.dll
+System.Security.Principal.Windows.dll
+System.Security.Principal.dll
+System.Security.SecureString.dll
+System.Security.dll
+System.ServiceModel.Web.dll
+System.ServiceProcess.dll
+System.Text.Encoding.Extensions.dll
+System.Text.Encoding.dll
+System.Text.RegularExpressions.dll
+System.Threading.Overlapped.dll
+System.Threading.Tasks.Dataflow.dll
+System.Threading.Tasks.Extensions.dll
+System.Threading.Tasks.Parallel.dll
+System.Threading.Tasks.dll
+System.Threading.Thread.dll
+System.Threading.ThreadPool.dll
+System.Threading.Timer.dll
+System.Threading.dll
+System.Transactions.Local.dll
+System.Transactions.dll
+System.ValueTuple.dll
+System.Web.HttpUtility.dll
+System.Web.dll
+System.Windows.dll
+System.Xml.Linq.dll
+System.Xml.ReaderWriter.dll
+System.Xml.Serialization.dll
+System.Xml.XDocument.dll
+System.Xml.XPath.XDocument.dll
+System.Xml.XPath.dll
+System.Xml.XmlDocument.dll
+System.Xml.XmlSerializer.dll
+System.Xml.dll
+System.dll
+WindowsBase.dll
+cliscd
+cliscd.deps.json
+cliscd.dll
+cliscd.pdb
+cliscd.runtimeconfig.json
+createdump
+libclrjit.so
+libcoreclr.so
+libcoreclrtraceptprovider.so
+libdbgshim.so
+libhostfxr.so
+libhostpolicy.so
+libmscordaccore.so
+libmscordbi.so
+libsos.so
+libsosplugin.so
+mscorlib.dll
+netstandard.dll
+sosdocsunix.txt
+ls: cannot access '/etc/cliscd': No such file or directory
+ls: cannot access '/root/.cliscd': No such file or directory
diff --git a/dotnet-deb/dotnet-deb.csproj b/dotnet-deb/dotnet-deb.csproj
index 8dd59010..adc0d48c 100644
--- a/dotnet-deb/dotnet-deb.csproj
+++ b/dotnet-deb/dotnet-deb.csproj
@@ -17,15 +17,17 @@ Once you've installed this package as a .NET CLI tool, run dotnet deb to generat
See https://github.com/qmfrederik/dotnet-packaging/ for more information on how to use dotnet deb.
Packaging Tools for .NET CLI
- $(USERPROFILE)\.nuget\packages
+
+ all
+
-
+
true
lib\$(TargetFramework)\
diff --git a/dotnet-rpm/dotnet-rpm.csproj b/dotnet-rpm/dotnet-rpm.csproj
index 82aaaeb5..bc55e0bf 100644
--- a/dotnet-rpm/dotnet-rpm.csproj
+++ b/dotnet-rpm/dotnet-rpm.csproj
@@ -17,15 +17,17 @@ Once you've installed this package as a .NET CLI tool, run dotnet rpm to generat
See https://github.com/qmfrederik/dotnet-packaging/ for more information on how to use dotnet rpm.
Packaging Tools for .NET CLI
- $(USERPROFILE)\.nuget\packages
+
+ all
+
-
+
true
lib\$(TargetFramework)\
diff --git a/dotnet-tarball/dotnet-tarball.csproj b/dotnet-tarball/dotnet-tarball.csproj
index aafdbf9e..263557fb 100644
--- a/dotnet-tarball/dotnet-tarball.csproj
+++ b/dotnet-tarball/dotnet-tarball.csproj
@@ -17,15 +17,17 @@ Once you've installed this package as a .NET CLI tool, run dotnet tar to generat
See https://github.com/qmfrederik/dotnet-packaging/ for more information on how to use dotnet tarball.
Packaging Tools for .NET CLI
- $(USERPROFILE)\.nuget\packages
+
+ all
+
-
+
true
lib\$(TargetFramework)\
diff --git a/dotnet-zip/dotnet-zip.csproj b/dotnet-zip/dotnet-zip.csproj
index 0ee6076b..2968d4a9 100644
--- a/dotnet-zip/dotnet-zip.csproj
+++ b/dotnet-zip/dotnet-zip.csproj
@@ -17,15 +17,17 @@ Once you've installed this package as a .NET CLI tool, run dotnet zip to generat
See https://github.com/qmfrederik/dotnet-packaging/ for more information on how to use dotnet tarball.
Packaging Tools for .NET CLI
- $(USERPROFILE)\.nuget\packages
+
+ all
+
-
+
true
lib\$(TargetFramework)\
diff --git a/version.json b/version.json
new file mode 100644
index 00000000..88f0ce90
--- /dev/null
+++ b/version.json
@@ -0,0 +1,8 @@
+{
+ "$schema": "https://raw.githubusercontent.com/AArnott/Nerdbank.GitVersioning/master/src/NerdBank.GitVersioning/version.schema.json",
+ "version": "0.1",
+ "publicReleaseRefSpec": [
+ "^refs/heads/master$", // we release out of master
+ "^refs/tags/v\\d+\\.\\d+" // we also release tags starting with vN.N
+ ],
+}
\ No newline at end of file