|
| 1 | +param( |
| 2 | + [Parameter()] |
| 3 | + [string]$SqlInstance, |
| 4 | + [string]$Database, |
| 5 | + [string]$Version, |
| 6 | + [string]$TempDir = $Env:RUNNER_TEMP, |
| 7 | + [string]$User, |
| 8 | + [string]$Password |
| 9 | +) |
| 10 | + |
| 11 | +$DownloadUrl = "http://tsqlt.org/download/tsqlt/?version=$Version" |
| 12 | +$zipFile = Join-Path $TempDir "tSQLt.zip" |
| 13 | +$zipFolder = Join-Path $TempDir "tSQLt" |
| 14 | +$CLRSecurityQuery = " |
| 15 | +/* Turn off CLR Strict for 2017+ fix */ |
| 16 | +IF EXISTS (SELECT 1 FROM sys.configurations WHERE name = 'clr strict security') |
| 17 | +BEGIN |
| 18 | + EXEC sp_configure 'show advanced options', 1; |
| 19 | + RECONFIGURE; |
| 20 | +
|
| 21 | + EXEC sp_configure 'clr strict security', 0; |
| 22 | + RECONFIGURE; |
| 23 | +END |
| 24 | +GO" |
| 25 | + |
| 26 | +try { |
| 27 | + Write-Output "Downloading $DownloadUrl" |
| 28 | + Invoke-WebRequest -Uri $DownloadUrl -OutFile $zipFile -ErrorAction Stop -UseBasicParsing |
| 29 | + Expand-Archive -Path $zipFile -DestinationPath $zipFolder -Force |
| 30 | + $installFile = (Get-ChildItem $zipFolder -Filter "tSQLt.class.sql").FullName |
| 31 | + $setupFile = (Get-ChildItem $zipFolder -Filter "PrepareServer.sql").FullName |
| 32 | + Write-Output "Download complete." |
| 33 | +} |
| 34 | +catch { |
| 35 | + Write-Error "Unable to download & extract tSQLt from '$DownloadUrl'. Ensure version is valid." -ErrorAction "Stop" |
| 36 | +} |
| 37 | + |
| 38 | +if ($isMacOs) { |
| 39 | + Write-Output "Only Linux and Windows operation systems supported." |
| 40 | +} |
| 41 | +elseif ($IsLinux) { |
| 42 | + if ($User -and $Password) { |
| 43 | + sqlcmd -S $SqlInstance -d $Database -q $CLRSecurityQuery -U $User -P $Password |
| 44 | + sqlcmd -S $SqlInstance -d $Database -i $setupFile -U $User -P $Password |
| 45 | + sqlcmd -S $SqlInstance -d $Database -i $installFile -U $User -P $Password |
| 46 | + } |
| 47 | + else { |
| 48 | + sqlcmd -S $SqlInstance -d $Database -q $CLRSecurityQuery |
| 49 | + sqlcmd -S $SqlInstance -d $Database -i $setupFile |
| 50 | + sqlcmd -S $SqlInstance -d $Database -i $installFile |
| 51 | + } |
| 52 | +} |
| 53 | +elseif ($IsWindows) { |
| 54 | + $connSplat = @{ |
| 55 | + ServerInstance = $SqlInstance |
| 56 | + } |
| 57 | + if ($User -and $Password) { |
| 58 | + $SecPass = ConvertTo-SecureString -String $Password -AsPlainText -Force |
| 59 | + $Credential = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $User, $SecPass |
| 60 | + $connSplat.add("Credential", $Credential) |
| 61 | + } |
| 62 | + |
| 63 | + if (!(Get-SqlDatabase @connSplat -Name $Database)) { |
| 64 | + Write-Error "Database '$Database' not found." -ErrorAction "Stop" |
| 65 | + } |
| 66 | + Invoke-Sqlcmd @connSplat -Database $Database -Query $CLRSecurityQuery -OutputSqlErrors $true |
| 67 | + Invoke-Sqlcmd @connSplat -Database $Database -InputFile $setupFile -OutputSqlErrors $true |
| 68 | + Invoke-Sqlcmd @connSplat -Database $Database -InputFile $installFile -Verbose -OutputSqlErrors $true |
| 69 | +} |
| 70 | + |
| 71 | +Write-Output "Installation completed." |
0 commit comments