OneComputeWorker\Deployment\CreateApplicationPackage.ps1
function Get-ScriptDirectory
{
$invocation = (Get-Variable MyInvocation -Scope 1).Value
Split-Path $invocation.MyCommand.Path
}
function ZipFiles($zipfilename, $sourceDir)
{
Add-Type -Assembly System.IO.Compression.FileSystem
$compressionLevel = [System.IO.Compression.CompressionLevel]::Optimal
[System.IO.Compression.ZipFile]::CreateFromDirectory($sourceDir, $zipfilename, $compressionLevel, $false)
}
# $zipFileName --> The name of the zip file to create, without the .zip file extension.
# $projectRelativePath --> The path of the worker project's release output directory to be zipped, relative to the directory of this script.
function CreateApplicationPackage($zipfilename, $projectRelativePath)
{
# Get the folder for storing the zip files.
$appPkgZipsDir = join-path -path $scriptDir -childpath "\AppPkgZips"
Write-Output "AppPkgZipsDir is $appPkgZipsDir"
# Get the temp/staging folder to copy binaries into for zipping.
$appPkgTmpDir = join-path -path $appPkgZipsDir -childpath ([IO.Path]::Combine("\~tmp", $zipfilename))
Write-Output "AppPkgTmpDir is $appPkgTmpDir"
# Get the release build of the specified project's files.
$projectReleaseDir = [IO.Path]::GetFullPath((join-path $scriptDir $projectRelativePath))
Write-Output "ProjectReleaseDir is $projectReleaseDir"
# Get the application package zip file path.
$appPkgZip = join-path -path $appPkgZipsDir -childpath ($zipfilename + ".zip")
Write-Output "Application package is $appPkgZip"
# Delete the app package's staging/temp directory if it exists.
if (Test-Path $appPkgTmpDir)
{
Write-Output "Deleting $appPkgTmpDir"
remove-item $appPkgTmpDir -Recurse
Write-Output "Deleted $appPkgTmpDir"
}
# Delete the existing application package zip file if it exists.
if (Test-Path $appPkgZip)
{
Write-Output "Deleting $appPkgZip"
remove-item $appPkgZip
Write-Output "Deleted $appPkgZip"
}
# Create the app package staging/temp directory.
Write-Output "Creating $appPkgTmpDir"
new-item -Path $appPkgTmpDir -ItemType Directory
Write-Output "Created $appPkgTmpDir"
# Copy the release build of the specified project's files.
robocopy $projectReleaseDir $appPkgTmpDir /XF "*.pdb" "*.tmp"
Write-Output "Creating $appPkgZip"
ZipFiles $appPkgZip $appPkgTmpDir
Write-Output "Created $appPkgZip"
}
# Get the root directory for creating the application package.
$scriptDir = Get-ScriptDirectory
# TODO: Define the name of the worker.
CreateApplicationPackage "xxxxxx" "..\OneComputeWorker\bin\Release"