# ASP.NET # Build and test ASP.NET projects. # Add steps that publish symbols, save build artifacts, deploy, and more: # https://docs.microsoft.com/azure/devops/pipelines/apps/aspnet/build-aspnet-4 trigger: - master pool: vmImage: 'windows-latest' variables: 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 steps: - task: NuGetToolInstaller@1 - task: UseDotNet@2 inputs: packageType: sdk version: 10.x installationPath: $(Agent.ToolsDirectory)/dotnet - task: NuGetCommand@2 inputs: restoreSolution: '$(solution)' - 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: 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: 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: 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: 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'