-
-
Notifications
You must be signed in to change notification settings - Fork 63
148 lines (123 loc) · 5.5 KB
/
ci_MininalPermissions.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
name: DBA Dash CI with Minimal Permissions
on:
push:
workflow_dispatch:
jobs:
build:
name: Build
runs-on: windows-latest
strategy:
fail-fast: false
matrix:
language: [csharp]
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Setup .NET Core
uses: actions/setup-dotnet@v3
with:
dotnet-version: 6.0.x
dotnet-quality: 'ga'
- name: Check SDK version
run: dotnet --list-sdks
- name: Build
run: dotnet build -c CLI
- name: Build GUI
run: dotnet build DBADashGUI -o DBADashBuild\DBADashGUIOnly
- name: Add msbuild to PATH
uses: microsoft/setup-msbuild@v1.3
- name: Build DB
run: msbuild dbadashdb -property:Configuration=CLI
- name: Get Version
id: GetVersion
shell: powershell
run: |
$path = [System.IO.Path]::Combine((Get-Location),"DBADashBuild\CLI\DBADash.dll")
$version = [System.Reflection.Assembly]::LoadFrom($path).GetName().Version
$version.ToString(3)
Write-Output "BUILD_NUMBER=$($version.ToString(3))" >> $env:GITHUB_OUTPUT
- name: Get Build Reference
id: GetBuildReference
shell: powershell
run: |
Invoke-WebRequest -Uri 'https://dataplat.github.io/assets/dbatools-buildref-index.json' -OutFile 'DBADashBuild\CLI\BuildReference.json'
- name: Zip
shell: powershell
run: |
$zipPath = "DBADash_${{steps.GetVersion.outputs.BUILD_NUMBER}}.zip"
Compress-Archive -Path "DBADashBuild\CLI\*" -DestinationPath $zipPath
$guiZipPath = "DBADash_GUI_Only_${{steps.GetVersion.outputs.BUILD_NUMBER}}.zip"
Compress-Archive -Path "DBADashBuild\DBADashGUIOnly\*" -DestinationPath $guiZipPath
- name: Install SQL
uses: potatoqualitee/mssqlsuite@v1.7
with:
install: sqlengine
collation: Latin1_General_BIN
- name: Check SQL Install
run: |
sqlcmd -S localhost -U sa -P dbatools.I0 -d tempdb -Q "SELECT @@version as Version;"
sqlcmd -S localhost -U sa -P dbatools.I0 -d tempdb -Q "SELECT SERVERPROPERTY('Collation') AS Collation;"
- name: Add SQL Login for DBA Dash service with minimal permissions
run: |
sqlcmd -S localhost -U sa -P dbatools.I0 -d master -Q "CREATE LOGIN [DBADashService] WITH PASSWORD=N'Use_A_Str0ng_Passw0rd', DEFAULT_DATABASE=[master], CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF
GRANT CREATE ANY DATABASE TO [DBADashService] /* Only required to allow service account to create repository database */
GRANT VIEW SERVER STATE TO [DBADashService]
GRANT VIEW ANY DATABASE TO [DBADashService]
GRANT CONNECT ANY DATABASE TO [DBADashService]
GRANT VIEW ANY DEFINITION TO [DBADashService]
GRANT ALTER ANY EVENT SESSION TO [DBADashService] /* Required if you want to use slow query capture */
USE [msdb]
IF NOT EXISTS(SELECT *
FROM msdb.sys.database_principals
WHERE name = 'DBADashService')
BEGIN
CREATE USER [DBADashService] FOR LOGIN [DBADashService]
END
ALTER ROLE [db_datareader] ADD MEMBER [DBADashService]
ALTER ROLE [SQLAgentReaderRole] ADD MEMBER [DBADashService]"
- name: Configure & Install DBA Dash as Service
shell: powershell
run: |
$ErrorActionPreference = "Stop"
$zipPath = "DBADash_${{steps.GetVersion.outputs.BUILD_NUMBER}}.zip"
$InstallPath = "C:\DBADashTest"
"Extract to $InstallPath"
Expand-Archive -Path $zipPath -DestinationPath $InstallPath -Force -ErrorAction Stop
Set-Location $InstallPath
"Configure"
./dbadashconfig -c "Data Source=localhost;UID=DBADashService;pwd=Use_A_Str0ng_Passw0rd;Initial Catalog=DBADashDB_GitHubAction;Encrypt=True;TrustServerCertificate=True;" -a SetDestination
./dbadashconfig -c "Data Source=localhost;UID=DBADashService;pwd=Use_A_Str0ng_Passw0rd;Encrypt=True;TrustServerCertificate=True;" -a Add --PlanCollectionEnabled --SlowQueryThresholdMs 1000 --SchemaSnapshotDBs "*" --NoWMI
"Install Service"
./DBADashService install --localservice
"Start Service"
net start DBADashService
"Wait 60 sec"
Start-Sleep -s 60
"Get Logs"
$logsFolder = "$InstallPath\Logs"
Get-ChildItem -Path $logsFolder | Get-Content
exit 0
- name: Wait 5min
shell: powershell
run: |
"Wait 5min"
Start-Sleep -s 300
- name: Output CollectionErrorLog
shell: powershell
run: |
Invoke-Sqlcmd -ServerInstance $params.ServerInstance -Database "DBADashDB_GitHubAction" -Query "SELECT * FROM dbo.CollectionErrorLog" -TrustServerCertificate | Format-Table
- name: Output Table Counts
shell: powershell
run: |
./Scripts/Get-TableCounts -ServerInstance "LOCALHOST" -Database "DBADashDB_GitHubAction"
- name: Run Pester Tests
shell: powershell
run: |
Install-Module Pester -Force
Import-Module Pester -PassThru
$NoWMI=$true
Invoke-Pester -Output Detailed Scripts\CI_Workflow.Tests.ps1
- name: Output Log and Check for Errors
shell: powershell
run: |
./Scripts/Get-LogContent -LogPath "C:\DBADashTest\Logs" -ThrowError