ServerManagers/.azure/pipelines/azure-pipelines-servermanagers-build.yml
2024-12-16 18:10:04 +10:00

267 lines
10 KiB
YAML

parameters:
- name: ApplicationName
type: string
- name: SolutionFile
type: string
- name: ProjectFile
type: string
- name: PublishFolder
type: string
- name: BuildConfiguration
type: string
default: Release
- name: BuildPlatform
type: string
default: AnyCPU
stages:
- stage: build
displayName: Build and Publish
jobs:
- job: build
displayName: Build and Publish
workspace:
clean: all
steps:
- task: PowerShell@2
displayName: Write Build Parameters
condition: contains(variables['system.debug'], 'true')
inputs:
targetType: inline
script: |
Write-Host "ApplicationName: ${{parameters.ApplicationName}}"
Write-Host "SolutionFile: ${{parameters.SolutionFile}}"
Write-Host "ProjectFile: ${{parameters.ProjectFile}}"
Write-Host "PublishFolder: ${{parameters.PublishFolder}}"
Write-Host "BuildConfiguration: ${{parameters.BuildConfiguration}}"
Write-Host "BuildPlatform: ${{parameters.BuildPlatform}}"
pwsh: true
- template: create-agent-capabilities-variables.yml
- task: PowerShell@2
displayName: Write Environment Variables
condition: contains(variables['system.debug'], 'true')
inputs:
targetType: inline
script: '(gci env:*).GetEnumerator() | Sort-Object Name | Out-String'
pwsh: true
- task: PowerShell@2
displayName: Tag Files
env:
DEPLOY_BUILDNUMBER: $(Build.BuildNumber)
DEPLOY_REQUESTEDFOREMAIL: $(Build.RequestedForEmail)
DEPLOY_REQUESTEDFOR: $(Build.RequestedFor)
inputs:
targetType: inline
script: |
$appVersion = $env:DEPLOY_BUILDNUMBER
$tag = $appVersion
Write-Host "Performing Git Tag Delete"
git tag -d $tag
git push origin :refs/tags/$tag
Write-Host "Performing Git Tag"
git tag $tag
Write-Host "Performing Git Tag Push"
git push --tags
pwsh: true
workingDirectory: '$(Build.SourcesDirectory)'
- task: NuGetToolInstaller@1
displayName: Install NuGet 6.7.0
inputs:
versionSpec: '6.7.0'
- task: NuGetCommand@2
displayName: NuGet Restore
inputs:
restoreSolution: '${{parameters.SolutionFile}}'
- template: update-semantic-versioning-in-assembyinfo-files.yml
parameters:
ApplicationName: ${{parameters.ApplicationName}}
PathToSearch: '$(Build.SourcesDirectory)/src'
- task: projectfileprops@1
displayName: Modify ApplicationVersion in Project File
inputs:
path: '${{parameters.ProjectFile}}'
fieldOptions: ApplicationVersion
value: '$(VersionMajor).$(VersionMinor).$(VersionBuild).%2a'
- task: projectfileprops@1
displayName: Modify ApplicationRevision in Project File
inputs:
path: '${{parameters.ProjectFile}}'
fieldOptions: ApplicationRevision
value: '$(VersionRevision)'
- task: VSBuild@1
displayName: Build ${{parameters.ApplicationName}} Project
inputs:
solution: '${{parameters.ProjectFile}}'
msbuildArgs: '/t:publish /p:PublishDir="$(Build.BinariesDirectory)"'
platform: '${{parameters.BuildPlatform}}'
configuration: '${{parameters.BuildConfiguration}}'
clean: true
- task: PowerShell@2
displayName: Clean-up Published Files
env:
BUILD_BUILDNUMBER: $(Build.BuildNumber)
BUILD_ARTIFACTSTAGINGDIRECTORY: $(Build.ArtifactStagingDirectory)
BUILD_BINARIESDIRECTORY: $(Build.BinariesDirectory)
inputs:
targetType: inline
script: |
$appVersion = $env:BUILD_BUILDNUMBER
$appVersionWithUnderscores = $appVersion.Replace('.', '_')
# Remove unwanted files
Remove-Item -Path "$env:BUILD_BINARIESDIRECTORY/*.application" -Force -ErrorAction Ignore
Remove-Item -Path "$env:BUILD_BINARIESDIRECTORY/*.exe" -Force -ErrorAction Ignore
# Rename application files folder
$applicationFolders = Get-ChildItem -Path "$env:BUILD_BINARIESDIRECTORY\Application Files" -Filter "*_$appVersionWithUnderscores" -Directory -Name
$applicationFolder = $applicationFolders.Where({$_.Replace(' ', '') -eq "${{parameters.ApplicationName}}_$appVersionWithUnderscores"})
if ($applicationFolder.Count -ne 1) {
throw "Could not find the application folder (${{parameters.ApplicationName}}_$appVersionWithUnderscores)"
}
$applicationFolderName = $applicationFolder[0]
$sourceFolder = "$env:BUILD_BINARIESDIRECTORY\Application Files\$applicationFolderName"
$destFolder = "$env:BUILD_BINARIESDIRECTORY\Application Files\${{parameters.ApplicationName}}_$appVersionWithUnderscores"
if ($sourceFolder -ne $destFolder) {
Rename-Item -Path $sourceFolder -NewName $destFolder -Force
}
pwsh: true
- task: CopyFiles@2
displayName: Copy Artifact Files
inputs:
SourceFolder: '$(Build.SourcesDirectory)'
Contents: |
src/${{parameters.ApplicationName}}/VersionFeed.xml
src/${{parameters.ApplicationName}}/VersionFeedBeta.xml
src/${{parameters.ApplicationName}}/Globalization/en-US/en-US.xaml
TargetFolder: '$(Build.ArtifactStagingDirectory)'
OverWrite: true
flattenFolders: true
preserveTimestamp: true
- task: PowerShell@2
displayName: Create Latest Version Files
env:
BUILD_BUILDNUMBER: $(Build.BuildNumber)
BUILD_ARTIFACTSTAGINGDIRECTORY: $(Build.ArtifactStagingDirectory)
inputs:
targetType: inline
script: |
$appVersion = $env:BUILD_BUILDNUMBER
$appVersionShort = $appVersion.Substring(0, $appVersion.LastIndexOf('.'))
$versionFile = "$env:BUILD_ARTIFACTSTAGINGDIRECTORY/latest.txt"
$AppVersionShort | Set-Content "$versionFile"
$versionFile = "$env:BUILD_ARTIFACTSTAGINGDIRECTORY/latestBeta.txt"
$AppVersion | Set-Content "$versionFile"
pwsh: true
- task: PowerShell@2
displayName: Create Installer File
env:
BUILD_BUILDNUMBER: $(Build.BuildNumber)
BUILD_ARTIFACTSTAGINGDIRECTORY: $(Build.ArtifactStagingDirectory)
BUILD_BINARIESDIRECTORY: $(Build.BinariesDirectory)
BUILD_SOURCESDIRECTORY: $(Build.SourcesDirectory)
#AGENT_USER_INNOSETUP: 'C:\Program Files (x86)\Inno Setup 6\ISCC.exe'
inputs:
targetType: inline
script: |
$appVersion = $env:BUILD_BUILDNUMBER
$appVersionShort = $appVersion.Substring(0, $appVersion.LastIndexOf('.'))
$appVersionWithUnderscores = $appVersion.Replace('.', '_')
$iconFile = "$env:BUILD_SOURCESDIRECTORY/src/${{parameters.ApplicationName}}/Art/favicon.ico"
Copy-Item -Path "$iconFile" -Destination "$env:BUILD_BINARIESDIRECTORY/favicon.ico" -Force
$installScriptFile = ".azure/scripts/${{parameters.ApplicationName}}.iss"
$installTextFile = '.azure/scripts/Installer.txt'
$installTextFileContent = @"
#define AppVer "$appVersionShort"
#define AppVerFull "$appVersion"
#define AppVerPath "$appVersionWithUnderscores"
#define RootPath "$env:BUILD_BINARIESDIRECTORY"
#define SourceDir "$env:BUILD_BINARIESDIRECTORY\Application Files\${{parameters.ApplicationName}}_$appVersionWithUnderscores"
#define OutputDir "$env:BUILD_ARTIFACTSTAGINGDIRECTORY"
"@
$installTextFileContent | Set-Content "$installTextFile" -Encoding Ascii -Force
& "$env:AGENT_USER_INNOSETUP" "$installScriptFile"
$exeFile = "$env:BUILD_ARTIFACTSTAGINGDIRECTORY/${{parameters.ApplicationName}}_$appVersionShort.exe"
Copy-Item -Path $exeFile -Destination "$env:BUILD_ARTIFACTSTAGINGDIRECTORY/latest.exe" -Force
pwsh: true
- task: PowerShell@2
displayName: Create Duplicate ServerManager Updater File
env:
BUILD_BUILDNUMBER: $(Build.BuildNumber)
BUILD_ARTIFACTSTAGINGDIRECTORY: $(Build.ArtifactStagingDirectory)
BUILD_BINARIESDIRECTORY: $(Build.BinariesDirectory)
inputs:
targetType: inline
script: |
$appVersion = $env:BUILD_BUILDNUMBER
$appVersionWithUnderscores = $appVersion.Replace('.', '_')
$applicationFolderName = "${{parameters.ApplicationName}}_$($appVersionWithUnderscores)"
$sourcePath = "$env:BUILD_BINARIESDIRECTORY/Application Files/$applicationFolderName"
Copy-Item -Path "$sourcePath\ServerManagerUpdater.exe" -Destination "$sourcePath\NewServerManagerUpdater.exe" -Force
pwsh: true
- task: PowerShell@2
displayName: Archive Binary Files
env:
BUILD_BUILDNUMBER: $(Build.BuildNumber)
BUILD_ARTIFACTSTAGINGDIRECTORY: $(Build.ArtifactStagingDirectory)
BUILD_BINARIESDIRECTORY: $(Build.BinariesDirectory)
inputs:
targetType: inline
script: |
$appVersion = $env:BUILD_BUILDNUMBER
$appVersionShort = $appVersion.Substring(0, $appVersion.LastIndexOf('.'))
$appVersionWithUnderscores = $appVersion.Replace('.', '_')
$applicationFolderName = "${{parameters.ApplicationName}}_$($appVersionWithUnderscores)"
$sourcePath = "$env:BUILD_BINARIESDIRECTORY/Application Files/$applicationFolderName"
$zipFile = "$env:BUILD_ARTIFACTSTAGINGDIRECTORY/${{parameters.ApplicationName}}_$($appVersionShort).zip"
Add-Type -Assembly System.IO.Compression.FileSystem
$compressionLevel = [System.IO.Compression.CompressionLevel]::Optimal
[System.IO.Compression.ZipFile]::CreateFromDirectory($sourcePath, $zipFile, $compressionLevel, $false)
Copy-Item -Path $zipFile -Destination "$env:BUILD_ARTIFACTSTAGINGDIRECTORY/latest.zip" -Force
pwsh: true
- task: PublishBuildArtifacts@1
displayName: Publish Artifacts
enabled: true
inputs:
PathtoPublish: '$(Build.ArtifactStagingDirectory)'
ArtifactName: '${{parameters.PublishFolder}}'
- template: clean-agent-folders.yml
parameters:
CleanArtifactsFolder: true
CleanBinariesFolder: true
CleanSourcesFolder: true
CleanPublishFolder: true
PublishFolder: ${{parameters.PublishFolder}}