Get CMSDBVersion after restore to check if version is correct. #59
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: "CI: Build and Test" | |
on: | |
push: | |
branches: [main, feat/automatic_E2E_testing] | |
#paths: | |
# - "**.cs" | |
# - "**.tsx" | |
# - "**.js" | |
# - "**.csproj" | |
# - "**.props" | |
# - "**.targets" | |
# - "**.sln" | |
# - "**/Client/**/*.json" | |
pull_request: | |
branches: [main] | |
paths: | |
- "**.cs" | |
- "**.cshtml" | |
- "**.tsx" | |
- "**.js" | |
- "**.json" | |
- "**.csproj" | |
- "**.props" | |
- "**.targets" | |
- "**.sln" | |
jobs: | |
build_and_test: | |
name: Build and Test | |
runs-on: ubuntu-latest | |
defaults: | |
run: | |
shell: pwsh | |
env: | |
ASPNETCORE_ENVIRONMENT: CI | |
DOTNET_CLI_TELEMETRY_OPTOUT: 1 | |
DOTNET_SKIP_FIRST_TIME_EXPERIENCE: 1 | |
DOTNET_NOLOGO: 1 | |
PROJECT_NAME: DancingGoat | |
ASPNETCORE_URLS: https://localhost:14065 | |
STATUS_CHECK_URL: https://localhost:14065/status | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
submodules: true | |
- name: Setup .NET | |
uses: actions/setup-dotnet@v4 | |
with: | |
global-json-file: global.json | |
- name: Install dependencies | |
run: | | |
dotnet restore ` | |
--locked-mode | |
- name: Build Solution | |
run: | | |
dotnet build ` | |
--configuration Release ` | |
--no-restore | |
- name: Get Database Backup Name | |
run: | | |
$latestBackup = Get-Content -Path "./database/backups.txt" -TotalCount 1 | |
"DATABASE_BACKUP_FILENAME=$latestBackup" >> $env:GITHUB_ENV | |
- name: Extract Database Backup | |
run: | | |
Expand-Archive ` | |
-Path "./database/${{ env.DATABASE_BACKUP_FILENAME }}.zip" ` | |
-DestinationPath "./database" | |
- name: Install a SQL Server suite of tools (SQLEngine, SQLPackage) | |
uses: potatoqualitee/mssqlsuite@9a0136e208df60b8ecb62909f076bc34854fa55a # set as a commit hash for security - v1.7 | |
with: | |
install: sqlpackage, sqlengine | |
sa-password: Pass@12345 | |
version: 2022 | |
- name: Restore Database .bak | |
# TODO: Heslo v otevřené podobě? | |
run: | | |
docker exec sql mkdir /var/opt/mssql/backup | |
docker cp "./database/${{ env.DATABASE_BACKUP_FILENAME }}" sql:/var/opt/mssql/backup | |
sqlcmd ` | |
-S localhost ` | |
-d master ` | |
-U "sa" ` | |
-P "Pass@12345" ` | |
-Q "RESTORE DATABASE [XByK_DancingGoat_Shopify] FROM DISK='/var/opt/mssql/backup/${{ env.DATABASE_BACKUP_FILENAME }}' WITH MOVE 'XByK_DancingGoat_Shopify' TO '/var/opt/mssql/data/XByK_DancingGoat_Shopify.mdf', MOVE 'XByK_DancingGoat_Shopify_log' TO '/var/opt/mssql/data/XByK_DancingGoat_Shopify_log.ldf'" | |
sqlcmd ` | |
-S localhost ` | |
-d master ` | |
-U "sa" ` | |
-P "Pass@12345" ` | |
-Q "SELECT KeyValue FROM CMS_SettingsKey WHERE KeyName = 'CMSDBVersion'" | |
if: endsWith(env.DATABASE_BACKUP_FILENAME, '.bak') | |
- name: Restore Database .bacpac | |
run: | | |
sqlpackage ` | |
/a:Import ` | |
/tsn:localhost ` | |
/tdn:XByK_DancingGoat_Shopify ` | |
/tu:sa ` | |
/tp:Pass@12345 ` | |
/sf:"./database/${{ env.DATABASE_BACKUP_FILENAME }}" ` | |
/tec:False | |
if: endsWith(env.DATABASE_BACKUP_FILENAME, '.bacpac') | |
- name: Restore CI Repository | |
working-directory: "./scripts" | |
run: | | |
./Restore-CI.ps1 | |
- name: Publish Application | |
run: | | |
dotnet publish ` | |
./examples/DancingGoat-Shopify ` | |
-c Release ` | |
-o ./publish ` | |
--no-build ` | |
--no-restore | |
- name: Install Azurite | |
id: azuright | |
uses: potatoqualitee/azuright@e56d2754eb15218d507961493bc83ca037216887 # set as a commit hash for security - v1.1 | |
- name: Test Solution | |
run: | | |
dotnet test ` | |
--configuration Release ` | |
--no-build ` | |
--no-restore | |
- name: Run Application and E2E Tests | |
run: | | |
# Run the ASP.NET Core app as a background job | |
cd ./publish | |
Start-Job -ScriptBlock { dotnet ./${{ env.PROJECT_NAME }}.dll } -Name ${{ env.PROJECT_NAME }} | |
Receive-Job -Name ${{ env.PROJECT_NAME }} | |
cd ../ | |
# The ASP.NET Core app can take a few seconds to start, so we delay running tests | |
# until it is ready, and fail if we go over a maximum wait time | |
$limit = 10 | |
$attempts = 0 | |
$success = $false | |
while ($attempts -lt $limit -and -not $success) { | |
Start-Sleep -Seconds 1 | |
try { | |
$response = Invoke-WebRequest -Uri ${{ env.STATUS_CHECK_URL }} -Method Get -SkipCertificateCheck | |
if ($response.StatusCode -eq 200) { | |
Write-Output "Application is ready." | |
$success = $true | |
} | |
} | |
catch { | |
Write-Output "Attempt $attempts - Application not ready yet." | |
} | |
$attempts++ | |
} | |
if (-not $success) { | |
Write-Output "Application did not respond in time." | |
exit 1 | |
} | |
# TODO: Run the E2E tests | |
# Stop the background ASP.NET Core application | |
Receive-Job -Name ${{ env.PROJECT_NAME }} | |
Stop-Job -Name ${{ env.PROJECT_NAME }} | |
Remove-Job -Name ${{ env.PROJECT_NAME }} |