Skip to content

Instantly share code, notes, and snippets.

@RhysC
Created December 30, 2012 03:49
Show Gist options
  • Save RhysC/4410871 to your computer and use it in GitHub Desktop.
Save RhysC/4410871 to your computer and use it in GitHub Desktop.
sample psake script for migrations
Properties {
$build_dir = Split-Path $psake.build_script_file
$build_artifacts_dir = "$build_dir\..\BuildArtifacts\"
$code_dir = "$build_dir\..\"
$soln = "$build_dir\..\AgentHoney.Azure.sln"
$nuget_package_dir = "$build_dir\..\..\Packages"
$database_server = ".\SqlExpress"
$database_instance = "AgentHoney_AutoTestDb"
$ef_tools_ouput = "$build_artifacts_dir\Tools\EF\"
}
FormatTaskName (("-"*25) + "[{0}]" + ("-"*25))
Task Default -Depends Package, MigrateDatabase
Task Package -Depends Clean, Build, PackageEntityFrameworkMigrateExe
Task Build -Depends Clean {
Write-Host "Building $soln" -ForegroundColor Green
Exec { msbuild "$soln" /t:Build /p:Configuration=Release /v:quiet /p:OutDir=$build_artifacts_dir }
}
Task Clean {
Write-Host "Creating BuildArtifacts directory" -ForegroundColor Green
if (Test-Path $build_artifacts_dir)
{
rd $build_artifacts_dir -rec -force | out-null
}
mkdir $build_artifacts_dir | out-null
Write-Host "Cleaning " -ForegroundColor Green
Exec { msbuild "$soln" /t:Clean /p:Configuration=Release /v:quiet }
}
Task PackageEntityFrameworkMigrateExe {
Write-Host "Packaging Entity Frameworks Migrate.exe so it is usable" -ForegroundColor Green
$ef_package_dir = "$nuget_package_dir\EntityFramework.5.0.0"
if (Test-Path $ef_tools_ouput) {
rd $ef_tools_ouput -rec -force | out-null
}
mkdir $ef_tools_ouput | out-null
Copy-Item "$ef_package_dir\lib\net45\*" $ef_tools_ouput -Recurse -Force
Copy-Item "$ef_package_dir\tools\*" $ef_tools_ouput -Recurse
}
# create sql database - http://stackoverflow.com/questions/8048822/is-it-possible-to-create-a-database-in-sql-server-with-powershell
#http://sqlblog.com/blogs/allen_white/archive/2008/04/28/create-database-from-powershell.aspx
Task DropTestDatabase -ContinueOnError {
$db = Get-TestDatabase
$db.Refresh() #not sure why but sometimes this is required
$db.Drop()
}
Task CreateTestDatabase -Depends DropTestDatabase {
$db = Get-TestDatabase
$db.Create()
}
Task MigrateDatabase -depends CreateTestDatabase, PackageEntityFrameworkMigrateExe, Build {
$conn_str = "Data Source=$database_server;Initial Catalog=$database_instance;Integrated Security=SSPI"
$migrate = "$build_artifacts_dir\Tools\EF\migrate.exe"
Exec { & $migrate "AgentHoney.WebRole.dll" /StartUpDirectory="$build_artifacts_dir" /connectionString="$conn_str" /connectionProviderName="System.Data.SqlClient" }
}
function Get-TestDatabase{
[System.Reflection.Assembly]::LoadWithPartialName('Microsoft.SqlServer.SMO') | out-null
$srv = new-object ('Microsoft.SqlServer.Management.Smo.Server') $database_server
$db = new-object ('Microsoft.SqlServer.Management.Smo.Database') ($srv, $database_instance)
Write-host "Returning database with server name '$database_server' and instance '$database_instance'"
return $db
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment