leeroya
2/2/2014 - 10:49 PM

An example Octopus deployment script for WPF ClickOnce applications.

An example Octopus deployment script for WPF ClickOnce applications.

Write-Host 'Copy the package payload over to the clickonce web application location'

$source = ".\"
$dest = "C:\Octopus\Applications\${OctopusEnvironmentName}\NextGen.ClickOnce\${OctopusPackageVersion}\Package"
$exclude = @('*.pdb','mage.exe', '*.ps1', '*Build*', '*.pfx')

$appManifestName = "${OctopusPackageName}.exe.manifest"
$appManifestPath = Join-Path $dest $appManifestName
$deployManifestPath = Join-Path $dest "${OctopusPackageName}.application"

Write-Host 'Create package folder and copy everything'

New-Item -ItemType directory -Path $dest
Get-ChildItem $source -Recurse -Exclude $exclude | Copy-Item -Destination $dest

Write-Host 'Create app manifest'

& ".\Build\Mage.exe" -New Application -Name "${OctopusPackageName} ${OctopusEnvironmentName}" -ToFile $appManifestPath -FromDirectory $dest -Version $OctopusPackageVersion | Write-Host
#& ".\Build\Mage.exe" -Sign $appManifestPath -CertFile .\ClickOnce.pfx -Password password

Write-Host 'Create deploy manifest'

& ".\Build\Mage.exe" -New Deployment -AppManifest $appManifestPath -Install true -Publisher "Andrew Best" -ProviderUrl "http://ci/AppName.${OctopusEnvironmentName}/Package/${OctopusPackageName}.application" -Version $OctopusPackageVersion -Name "${OctopusPackageName} ${OctopusEnvironmentName}" -ToFile $deployManifestPath | Write-Host

Write-Host 'Add deploy extension to files'

$ex = @('*.application', '*.manifest')
$packageFiles = Get-ChildItem $dest -Recurse -Exclude $ex

foreach ($file in $packageFiles) {
    $newname = $file.name + ".deploy"
    Rename-Item -Path $file -NewName $newname
}

Write-Host 'Add mapFileExtensions to deploy manifest so that it works with the *.deploy extension'

$xml = [xml](Get-Content "$deployManifestPath")
$deployment_node = $xml.SelectSingleNode("//*[local-name() = 'deployment']")
$deployment_node.SetAttribute("mapFileExtensions", "true")
$xml.Save("$deployManifestPath")

#Write-Host 'Sign deploy manifest'
#& ".\Build\Mage.exe" -Sign $deployManifestPath -CertFile .\ClickOnceSpike_TemporaryKey.pfx -Password centium

#Run Database with the configured connection string to migrate our testDb

#$connectionString = $OctopusParameters["DbContext"]
#$zeroDb = $OctopusParameters["ZeroDb"]
#& "bin\Database.exe" $connectionString $zeroDb | Write-Host