stopping for now
This commit is contained in:
2
.gitignore
vendored
2
.gitignore
vendored
@@ -9,7 +9,7 @@
|
||||
|
||||
# User-specific files (MonoDevelop/Xamarin Studio)
|
||||
*.userprefs
|
||||
|
||||
*.pem
|
||||
# Build results
|
||||
[Dd]ebug/
|
||||
[Dd]ebugPublic/
|
||||
|
||||
@@ -16,7 +16,7 @@ namespace QuikPak
|
||||
public string ManagedPipelineMode { get; set; } = "Integrated";
|
||||
public string ManagedRuntimeVersion { get; set; } = "v4.0";
|
||||
|
||||
public IEnumerable<Cert> Certs { get; set; }
|
||||
public IEnumerable<Cert> Certificates { get; set; }
|
||||
}
|
||||
|
||||
public class Endpoint
|
||||
@@ -29,7 +29,7 @@ namespace QuikPak
|
||||
public class Cert
|
||||
{
|
||||
public string Name { get; set; }
|
||||
public string CertificatePath { get; set; }
|
||||
public string Path { get; set; }
|
||||
|
||||
public string Password { get; set; }
|
||||
}
|
||||
|
||||
@@ -1,12 +1,19 @@
|
||||
{
|
||||
"UpgradeCode": "317e4313-2314-46e9-ae7e-6cdfee60c05d",
|
||||
"Name": "MyWebsite",
|
||||
"Version": "1.0.0.0",
|
||||
"Endpoints": [
|
||||
{
|
||||
"port": 80,
|
||||
"DnsName": "*",
|
||||
"Secure": false
|
||||
}
|
||||
]
|
||||
"UpgradeCode": "317e4313-2314-46e9-ae7e-6cdfee60c05d",
|
||||
"Name": "terribled",
|
||||
"Version": "1.0.0.0",
|
||||
"Endpoints": [
|
||||
{
|
||||
"port": 10000,
|
||||
"DnsName": "terribledev.io",
|
||||
"Secure": true
|
||||
}
|
||||
],
|
||||
"Certificates": [
|
||||
{
|
||||
"Name": "terribledev.io",
|
||||
"Path": "c:/projects/quikpak/mycert.pfx",
|
||||
"Password": "awesome"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -78,7 +78,7 @@ namespace QuikPak
|
||||
OutFileName = config.Name,
|
||||
PreserveTempFiles = true,
|
||||
UpgradeCode = new Guid(config.UpgradeCode),
|
||||
Certificates = config.Certs.Select(a => new Certificate { PFXPassword = a.Password, CertificatePath = a.CertificatePath, Request = false, StoreName = StoreName.personal, StoreLocation = StoreLocation.localMachine, Name = a.Name}).ToArray()
|
||||
Certificates = config.Certificates?.Select(a => new Certificate { PFXPassword = a.Password, CertificatePath = a.Path, Request = false, StoreName = StoreName.personal, StoreLocation = StoreLocation.localMachine, Name = a.Name}).ToArray() ?? new Certificate[0]
|
||||
};
|
||||
project.Properties.Add(new Property("REINSTALLMODE", "dmus"));
|
||||
project.MajorUpgrade = new MajorUpgrade() { AllowDowngrades = true, Schedule = UpgradeSchedule.afterInstallInitialize };
|
||||
@@ -96,19 +96,49 @@ namespace QuikPak
|
||||
project.IncludeWixExtension(WixExtension.IIs);
|
||||
Compiler.WixSourceGenerated += (document) =>
|
||||
{
|
||||
document.Descendants().Where(a => a.Name.ToString().EndsWith("WebVirtualDir", true)).ToList().ForEach(a=>a.Remove());
|
||||
var appPool = document.Descendants().Where(a => a.Name.ToString().EndsWith("WebAppPool", true));
|
||||
var certs = document.Descendants().Where(a => a.Name.ToString().EndsWith("Certificate", true));
|
||||
var res = document.Descendants().First(a=>a.Name.ToString().EndsWith("WebSite", true));
|
||||
// <iis:Certificate Id="cert" BinaryKey="certBinary" Name="IRCool.org" StoreLocation="localMachine" StoreName="personal" PFXPassword="mypasswordisawesome" Request="no" />
|
||||
//var website = document.DescendantNodes();
|
||||
string appPoolId = string.Empty;
|
||||
var certs = new List<XElement>();
|
||||
XElement website = null;
|
||||
foreach(var node in document.Descendants().ToList())
|
||||
{
|
||||
if(node == null || node.Name == null) continue;
|
||||
var nodeName = node.Name.ToString();
|
||||
if(nodeName.EndsWith("WebVirtualDir", true))
|
||||
{
|
||||
//remove virdir's as we should just use sites
|
||||
node.Remove();
|
||||
}
|
||||
if(nodeName.EndsWith("WebAppPool", true))
|
||||
{
|
||||
appPoolId = node.Attributes().First(a => a.Name == "Id").Value;
|
||||
}
|
||||
if(nodeName.EndsWith("Certificate", true))
|
||||
{
|
||||
certs.Add(node);
|
||||
}
|
||||
if(nodeName.EndsWith("WebSite", true))
|
||||
{
|
||||
website = node;
|
||||
}
|
||||
}
|
||||
if(string.IsNullOrWhiteSpace(appPoolId))
|
||||
{
|
||||
Console.Error.WriteLine("App pool unable to be identified. A major problem has occured");
|
||||
Environment.Exit(1);
|
||||
}
|
||||
if(website == null)
|
||||
{
|
||||
Console.Error.WriteLine("website unable to be identified. A major problem has occured");
|
||||
Environment.Exit(1);
|
||||
}
|
||||
|
||||
XNamespace name = "http://schemas.microsoft.com/wix/IIsExtension";
|
||||
foreach(var cert in certs)
|
||||
{
|
||||
|
||||
res.Add(new XElement(name+"CertificateRef", new XAttribute("Id", cert.Attribute("Id").Value)));
|
||||
website.Add(new XElement(name+"CertificateRef", new XAttribute("Id", cert.Attribute("Id").Value)));
|
||||
}
|
||||
res.Add(new XElement(name + "WebApplication", new XAttribute("Id", config.Name + "webapp"), new XAttribute("Name", config.Name + "webapp"), new XAttribute("WebAppPool", appPool.Attributes().First(a=>a.Name == "Id").Value)));
|
||||
website.Add(new XElement(name + "WebApplication", new XAttribute("Id", config.Name + "webapp"), new XAttribute("Name", config.Name + "webapp"), new XAttribute("WebAppPool", appPoolId)));
|
||||
|
||||
};
|
||||
Compiler.BuildMsi(project);
|
||||
|
||||
@@ -5,29 +5,27 @@
|
||||
<!-- Read this before publishing packages to chocolatey.org: https://github.com/chocolatey/chocolatey/wiki/CreatePackages -->
|
||||
<id>quikpak</id>
|
||||
<title>QuikPak (Install)</title>
|
||||
<version>0.7.1</version>
|
||||
<version>$version$</version>
|
||||
<authors>Tommy Parnell</authors>
|
||||
<owners>Tommy Parnell</owners>
|
||||
<summary>quickly pack directory's as IIS websites</summary>
|
||||
<description>quickly pack directory's as IIS websites
|
||||
</description>
|
||||
<projectUrl>https://github.com/tparnell8/QuikPak</projectUrl>
|
||||
<packageSourceUrl>https://github.com/tparnell8/QuikPak</packageSourceUrl>
|
||||
<projectUrl>https://github.com/terribledev/QuikPak</projectUrl>
|
||||
<packageSourceUrl>https://github.com/terribledev/QuikPak</packageSourceUrl>
|
||||
<!--<projectSourceUrl></projectSourceUrl>
|
||||
<docsUrl></docsUrl>
|
||||
<mailingListUrl></mailingListUrl>
|
||||
<bugTrackerUrl></bugTrackerUrl>-->
|
||||
<tags>MSI creation IIS</tags>
|
||||
<copyright></copyright>
|
||||
<licenseUrl>https://github.com/tparnell8/QuikPak/blob/master/LICENSE.md</licenseUrl>
|
||||
<licenseUrl>https://github.com/terribledev/QuikPak/blob/master/LICENSE.md</licenseUrl>
|
||||
<requireLicenseAcceptance>false</requireLicenseAcceptance>
|
||||
<dependencies>
|
||||
<dependency id="wixtoolset" />
|
||||
</dependencies>
|
||||
<!--<provides></provides>-->
|
||||
</metadata>
|
||||
<files>
|
||||
<file src="tools\**" target="tools" />
|
||||
<file src="..\bin\Release\**" target="" />
|
||||
<file src="..\bin\Release\**" target="" />
|
||||
</files>
|
||||
</package>
|
||||
|
||||
@@ -1,91 +0,0 @@
|
||||
## Summary
|
||||
How do I create packages? See https://github.com/chocolatey/choco/wiki/CreatePackages
|
||||
|
||||
If you are submitting packages to the community feed (https://chocolatey.org)
|
||||
always try to ensure you have read, understood and adhere to the create
|
||||
packages wiki link above.
|
||||
|
||||
## Automatic Packages?
|
||||
Consider making this package an automatic package, for the best
|
||||
maintainability over time. Read up at https://github.com/chocolatey/choco/wiki/AutomaticPackages
|
||||
|
||||
## Shim Generation
|
||||
Any executables you include in the package or download (but don't call
|
||||
install against using the built-in functions) will be automatically shimmed.
|
||||
|
||||
This means those executables will automatically be included on the path.
|
||||
Shim generation runs whether the package is self-contained or uses automation
|
||||
scripts.
|
||||
|
||||
By default, these are considered console applications.
|
||||
|
||||
If the application is a GUI, you should create an empty file next to the exe
|
||||
named 'name.exe.gui' e.g. 'bob.exe' would need a file named 'bob.exe.gui'.
|
||||
See https://github.com/chocolatey/choco/wiki/CreatePackages#how-do-i-set-up-batch-redirects-for-applications-that-have-a-gui
|
||||
|
||||
If you want to ignore the executable, create an empty file next to the exe
|
||||
named 'name.exe.ignore' e.g. 'bob.exe' would need a file named
|
||||
'bob.exe.ignore'.
|
||||
See https://github.com/chocolatey/choco/wiki/CreatePackages#how-do-i-exclude-executables-from-getting-batch-redirects
|
||||
|
||||
## Self-Contained?
|
||||
If you have a self-contained package, you can remove the automation scripts
|
||||
entirely and just include the executables, they will automatically get shimmed,
|
||||
which puts them on the path. Ensure you have the legal right to distribute
|
||||
the application though. See https://github.com/chocolatey/choco/wiki/Legal.
|
||||
|
||||
You should read up on the Shim Generation section to familiarize yourself
|
||||
on what to do with GUI applications and/or ignoring shims.
|
||||
|
||||
## Automation Scripts
|
||||
You have a powerful use of Chocolatey, as you are using PowerShell. So you
|
||||
can do just about anything you need. Choco has some very handy built-in
|
||||
functions that you can use, these are sometimes called the helpers.
|
||||
|
||||
### Built-In Functions
|
||||
https://github.com/chocolatey/choco/wiki/HelpersReference
|
||||
|
||||
A note about a couple:
|
||||
* Get-BinRoot - this is a horribly named function that doesn't do what new folks think it does. It gets you the 'tools' root, which by default is set to 'c:\tools', not the chocolateyInstall bin folder.
|
||||
* Install-BinFile - used for non-exe files - executables are automatically shimmed...
|
||||
* Uninstall-BinFile - used for non-exe files - executables are automatically shimmed
|
||||
|
||||
### Getting package specific information
|
||||
Use the package parameters pattern - see https://github.com/chocolatey/choco/wiki/How-To-Parse-PackageParameters-Argument
|
||||
|
||||
### Need to mount an ISO?
|
||||
https://github.com/chocolatey/choco/wiki/How-To-Mount-An-Iso-In-Chocolatey-Package
|
||||
|
||||
|
||||
### Environment Variables
|
||||
Chocolatey makes a number of environment variables available (You can access any of these with $env:TheVariableNameBelow):
|
||||
|
||||
* TEMP = Overridden to the CacheLocation, but may be the same as the original TEMP folder
|
||||
* ChocolateyInstall = Top level folder where Chocolatey is installed
|
||||
* chocolateyPackageName = The name of the package, equivalent to the id in the nuspec (0.9.9+)
|
||||
* chocolateyPackageVersion = The version of the package, equivalent to the version in the nuspec (0.9.9+)
|
||||
* chocolateyPackageFolder = The top level location of the package folder
|
||||
|
||||
#### Advanced Environment Variables
|
||||
The following are more advanced settings:
|
||||
|
||||
* chocolateyPackageParameters = (0.9.8.22+)
|
||||
* CHOCOLATEY_VERSION = The version of Choco you normally see. Use if you are 'lighting' things up based on choco version. (0.9.9+)
|
||||
- Otherwise take a dependency on the specific version you need.
|
||||
* chocolateyForceX86 = If available and set to 'true', then user has requested 32bit version. (0.9.9+)
|
||||
- Automatically handled in built in Choco functions.
|
||||
* OS_PLATFORM = Like Windows, OSX, Linux. (0.9.9+)
|
||||
* OS_VERSION = The version of OS, like 6.1 something something for Windows. (0.9.9+)
|
||||
* OS_NAME = The reported name of the OS. (0.9.9+)
|
||||
* IS_PROCESSELEVATED = Is the process elevated? (0.9.9+)
|
||||
|
||||
#### Experimental Environment Variables
|
||||
The following are experimental or use not recommended:
|
||||
|
||||
* OS_IS64BIT = This may not return correctly - it may depend on the process the app is running under (0.9.9+)
|
||||
* CHOCOLATEY_VERSION_PRODUCT = the version of Choco that may match CHOCOLATEY_VERSION but may be different (0.9.9+)
|
||||
- it's based on git describe
|
||||
* IS_ADMIN = Is the user an administrator? But doesn't tell you if the process is elevated. (0.9.9+)
|
||||
* chocolateyInstallOverride = Not for use in package automation scripts. (0.9.9+)
|
||||
* chocolateyInstallArguments = the installer arguments meant for the native installer. You should use chocolateyPackageParameters intead. (0.9.9+)
|
||||
|
||||
@@ -30,8 +30,11 @@ Create a json config file that looks something like this
|
||||
|
||||
```
|
||||
|
||||
then call QuikPak.exe -c path\to\your\config.json -x path\to\your\web\content
|
||||
then call QuikPak.exe -c path\to\your\config.jsondfsa -x path\to\your\web\content
|
||||
|
||||
## TODO
|
||||
## Certificates
|
||||
|
||||
Allow someone to include a certificate optionally for secure bindings
|
||||
You can also add certificates to your json bindings.
|
||||
|
||||
|
||||
....f.dfa.
|
||||
|
||||
27
config.json
27
config.json
@@ -1,12 +1,19 @@
|
||||
{
|
||||
"UpgradeCode": "317e4313-2314-46e9-ae7e-6cdfee60c05d",
|
||||
"Name": "MyWebsite",
|
||||
"Version": "1.0.0",
|
||||
"Endpoints": [
|
||||
{
|
||||
"port": 80,
|
||||
"DnsName": "mywebsite.com",
|
||||
"Secure": false
|
||||
}
|
||||
]
|
||||
"UpgradeCode": "317e4313-2314-46e9-ae7e-6cdfee60c05d",
|
||||
"Name": "terribled",
|
||||
"Version": "1.0.0.0",
|
||||
"Endpoints": [
|
||||
{
|
||||
"port": 10000,
|
||||
"DnsName": "terribledev.io",
|
||||
"Secure": true
|
||||
}
|
||||
],
|
||||
"Certificates": [
|
||||
{
|
||||
"Name": "terribledev.io",
|
||||
"Path": "c:/projects/quikpak/mycert.pfx",
|
||||
"Password": "awesome"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user