From 7f3cbcfdefce9f775756a8db5085429f0eb0e6b2 Mon Sep 17 00:00:00 2001 From: Lucas Morgan Date: Sun, 25 Jan 2026 13:11:16 -0600 Subject: [PATCH] fix yml --- azure-pipelines.yml | 190 ++++++++++++++++++++++++++------------------ 1 file changed, 114 insertions(+), 76 deletions(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index dfb93ab..2dd82d6 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -6,92 +6,130 @@ trigger: - master -pool: - vmImage: 'windows-latest' - variables: -solution: '**/*.sln' -buildPlatform: 'Any CPU' -buildConfiguration: 'Release' -projectName: 'Shogi' + solution: '**/*.sln' + buildPlatform: 'Any CPU' + buildConfiguration: 'Release' + projectName: 'Shogi' # Database variables - Set these as pipeline variables in Azure DevOps -# DatabaseServer: 'your-sql-server-address' -# DatabaseName: 'ShogiDb' -# DatabaseUser: 'your-db-user' -# DatabasePassword: 'your-db-password' # Mark as secret in Azure DevOps + DatabaseServer: 'your-sql-server-address' + DatabaseName: 'ShogiDb' + DatabaseUser: 'your-db-user' + DatabasePassword: 'your-db-password' # Mark as secret in Azure DevOps -steps: +jobs: +- job: Build + displayName: "Build and Deploy" + pool: + vmImage: 'windows-latest' + steps: -- task: NuGetToolInstaller@1 + - task: NuGetToolInstaller@1 -- task: UseDotNet@2 - inputs: - packageType: sdk - version: 10.x - installationPath: $(Agent.ToolsDirectory)/dotnet + - task: UseDotNet@2 + inputs: + packageType: sdk + version: 10.x + installationPath: $(Agent.ToolsDirectory)/dotnet -- task: NuGetCommand@2 - inputs: - restoreSolution: '$(solution)' + - task: NuGetCommand@2 + inputs: + restoreSolution: '$(solution)' -- task: FileTransform@1 - inputs: - folderPath: '$(System.DefaultWorkingDirectory)\$(projectName)' - fileType: 'json' - targetFiles: 'appsettings.json' + - task: FileTransform@1 + inputs: + folderPath: '$(System.DefaultWorkingDirectory)\$(projectName)' + fileType: 'json' + targetFiles: 'appsettings.json' -- task: DotNetCoreCLI@2 - inputs: - command: 'publish' - publishWebProjects: false - projects: '$(projectName)/$(projectName).csproj' - arguments: '-c Release -o $(Build.ArtifactStagingDirectory)' - zipAfterPublish: false + - task: DotNetCoreCLI@2 + inputs: + command: 'publish' + publishWebProjects: false + projects: '$(projectName)/$(projectName).csproj' + arguments: '-c Release -o $(Build.ArtifactStagingDirectory)' + zipAfterPublish: false -- task: PowerShell@2 - displayName: "Generate EF Core migration script" - inputs: - targetType: 'inline' - script: | - dotnet tool restore --tool-manifest $(projectName)/.config/dotnet-tools.json - dotnet ef migrations script --idempotent --project $(projectName)/$(projectName).csproj --output $(Build.ArtifactStagingDirectory)/migrations.sql - workingDirectory: '$(System.DefaultWorkingDirectory)' + - task: VSBuild@1 + displayName: "Build Database Project" + inputs: + solution: '**/*.sqlproj' + platform: '$(buildPlatform)' + configuration: '$(buildConfiguration)' + msbuildArgs: '/p:OutputPath=$(Build.ArtifactStagingDirectory)' -- task: CopyFilesOverSSH@0 - displayName: "Copy database migration script" - inputs: - sshEndpoint: 'LucaServer' - sourceFolder: '$(Build.ArtifactStagingDirectory)' - contents: 'migrations.sql' - targetFolder: '/var/www/apps/$(projectName)/migrations' - readyTimeout: '20000' + - task: PowerShell@2 + displayName: "Generate EF Core migration bundle" + inputs: + targetType: 'inline' + script: | + cd $(projectName) + dotnet tool restore + dotnet ef migrations bundle --self-contained -r linux-x64 --configuration Release --project $(projectName).csproj --output $(Build.ArtifactStagingDirectory)/efbundle + workingDirectory: '$(System.DefaultWorkingDirectory)' -- task: SSH@0 - displayName: "Apply database migrations" - inputs: - sshEndpoint: 'LucaServer' - runOptions: 'commands' - commands: | - # Install sqlcmd if not already installed (one-time setup) - # which sqlcmd || curl https://packages.microsoft.com/keys/microsoft.asc | sudo tee /etc/apt/trusted.gpg.d/microsoft.asc && curl https://packages.microsoft.com/config/ubuntu/22.04/prod.list | sudo tee /etc/apt/sources.list.d/mssql-release.list && sudo apt-get update && sudo ACCEPT_EULA=Y apt-get install -y mssql-tools18 unixodbc-dev - - # Apply migrations (adjust connection string as needed) - /opt/mssql-tools18/bin/sqlcmd -S $(DatabaseServer) -d $(DatabaseName) -U $(DatabaseUser) -P $(DatabasePassword) -i /var/www/apps/$(projectName)/migrations/migrations.sql -C - readyTimeout: '20000' + - task: PowerShell@2 + displayName: "Generate deployment script" + inputs: + targetType: 'inline' + script: | + $script = @" + #!/bin/bash + set -e + export PATH="`$PATH:`$HOME/.dotnet/tools" + cd /var/www/apps/$(projectName)/migrations + + echo "Applying EF Migrations..." + chmod +x ./efbundle + ./efbundle --connection '$(ConnectionStrings.ShogiDatabase)' + + echo "Applying DACPAC..." + dotnet tool install -g Microsoft.SqlPackage 2>/dev/null || true + # Use a glob or specific name for the dacpac + DACPAC_FILE=`$(ls *.dacpac | head -n 1) + sqlpackage /Action:Publish /SourceFile:"`$DACPAC_FILE" /TargetConnectionString:'$(ConnectionStrings.ShogiDatabase)' + "@ + # Ensure LF line endings for Linux + $script = $script -replace "`r`n", "`n" + [System.IO.File]::WriteAllText("$(Build.ArtifactStagingDirectory)/deploy_db.sh", $script) -- task: CopyFilesOverSSH@0 - displayName: "Copy application files" - inputs: - sshEndpoint: 'LucaServer' - sourceFolder: '$(Build.ArtifactStagingDirectory)' - contents: '**' - targetFolder: '/var/www/apps/$(projectName)' - readyTimeout: '20000' + - task: CopyFilesOverSSH@0 + displayName: "Copy database files" + inputs: + sshEndpoint: 'LucaServer' + sourceFolder: '$(Build.ArtifactStagingDirectory)' + contents: | + efbundle + *.dacpac + deploy_db.sh + targetFolder: '/var/www/apps/$(projectName)/migrations' + readyTimeout: '20000' -- task: SSH@0 - displayName: "Restart Kestrel" - inputs: - sshEndpoint: 'LucaServer' - runOptions: 'commands' - commands: 'sudo systemctl restart kestrel-Shogi.service' - readyTimeout: '20000' \ No newline at end of file + - task: SSH@0 + displayName: "Apply database migrations" + inputs: + sshEndpoint: 'LucaServer' + runOptions: 'commands' + commands: | + target="/var/www/apps/$(projectName)/migrations/deploy_db.sh" + chmod +x "$target" + sed -i 's/\r$//' "$target" + bash "$target" + readyTimeout: '20000' + + - task: CopyFilesOverSSH@0 + displayName: "Copy application files" + inputs: + sshEndpoint: 'LucaServer' + sourceFolder: '$(Build.ArtifactStagingDirectory)' + contents: '**' + targetFolder: '/var/www/apps/$(projectName)' + readyTimeout: '20000' + + - task: SSH@0 + displayName: "Restart Kestrel" + inputs: + sshEndpoint: 'LucaServer' + runOptions: 'commands' + commands: 'sudo systemctl restart kestrel-Shogi.service' + readyTimeout: '20000' \ No newline at end of file