pipeline file changes

This commit is contained in:
Brett Hewitson 2022-12-22 22:04:06 +10:00
parent a892ba92ac
commit fe64e5f7ae
2 changed files with 223 additions and 214 deletions

View file

@ -1 +1,223 @@
variables:
- name: ApplicationName
value: $(Build.DefinitionName)
- name: SolutionFile
value: 'src/Server-Managers.sln'
- name: ProjectFile
value: 'src/$(ApplicationName)/$(ApplicationName).csproj'
- name: BuildPlatform
value: AnyCPU
- name: BuildConfiguration
value: Release
- name: PublishFolder
value: publish
stages:
- stage: build
displayName: Build and Publish
jobs:
- job: build
displayName: Build and Publish
steps:
- task: PowerShell@2
displayName: Create AgentCapabilities Environment Variables
enabled: true
env:
SYSTEM_ACCESSTOKEN: $(System.AccessToken)
inputs:
targetType: filePath
filePath: './.azure/scripts/CreateAgentCapabilitiesEnvironmentVariables.ps1'
arguments: "-CollectionUri '$(System.CollectionUri)' -AgentId '$(Agent.Id)' -AgentName '$(Agent.Name)' -AccessToken '$(System.AccessToken)' -DebugMode $(System.Debug)"
pwsh: true
- task: PowerShell@2
displayName: Output Environment Variables
condition: contains(variables['system.debug'], 'true')
inputs:
targetType: inline
script: '(gci env:*).GetEnumerator() | Sort-Object Name | Out-String'
pwsh: true
- task: NuGetToolInstaller@1
displayName: Install NuGet 4.4.1
inputs:
versionSpec: '4.4.1'
- task: NuGetCommand@2
displayName: NuGet Restore
inputs:
restoreSolution: '$(SolutionFile)'
- task: PowerShell@2
displayName: Apply Semantic Versioning to AssemblyInfo Files
inputs:
targetType: filePath
filePath: './.azure/scripts/ApplySemanticVersioningToAssemblies.ps1'
arguments: "-applicationName $(ApplicationName) -pathToSearch '$(Build.SourcesDirectory)/src' -buildNumber $(Build.BuildNumber) -searchFilter 'AssemblyInfo.*'"
pwsh: true
- task: projectfileprops@1
displayName: Modify ApplicationVersion in Project File
inputs:
path: '$(ProjectFile)'
fieldOptions: ApplicationVersion
value: '$(VersionMajor).$(VersionMinor).$(VersionBuild).%2a'
- task: projectfileprops@1
displayName: Modify ApplicationRevision in Project File
inputs:
path: '$(ProjectFile)'
fieldOptions: ApplicationRevision
value: '$(VersionRevision)'
- task: VSBuild@1
displayName: Build $(ApplicationName) Project
inputs:
solution: '$(ProjectFile)'
msbuildArgs: '/t:publish /p:PublishDir="$(Build.BinariesDirectory)"'
platform: '$(BuildPlatform)'
configuration: '$(BuildConfiguration)'
clean: true
- task: PowerShell@2
displayName: Cleanup 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 "$(ApplicationName)_$appVersionWithUnderscores"})
if ($applicationFolder.Count -ne 1) {
throw "Could not find the application folder ($(ApplicationName)_$appVersionWithUnderscores)"
}
$applicationFolderName = $applicationFolder[0]
Rename-Item -Path "$env:BUILD_BINARIESDIRECTORY\Application Files\$applicationFolderName" -NewName "$env:BUILD_BINARIESDIRECTORY\Application Files\$(ApplicationName)_$appVersionWithUnderscores" -Force
pwsh: true
- task: CopyFiles@2
displayName: Copy Artifact Files
inputs:
SourceFolder: '$(Build.SourcesDirectory)'
Contents: |
src/$(ApplicationName)/VersionFeed.xml
src/$(ApplicationName)/VersionFeedBeta.xml
src/$(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('.'))
$appVersionWithUnderscores = $appVersion.Replace('.', '_')
$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)
AGENTCAPABILITIES_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('.', '_')
$installScriptFile = ".azure/scripts/$(ApplicationName).iss"
$installTextFile = '.azure/scripts/Installer.txt'
$sourceIconFile = "$env:BUILD_SOURCESDIRECTORY/src/$(ApplicationName)/Art/favicon.ico"
$destIconFile = "$env:BUILD_BINARIESDIRECTORY/favicon.ico"
Copy-Item -Path "$sourceIconFile" -Destination "$destIconFile" -Force
$installTextFileContent = @"
#define AppVer "$appVersionShort"
#define AppVerFull "$appVersion"
#define AppVerPath "$appVersionWithUnderscores"
#define RootPath "$env:BUILD_BINARIESDIRECTORY"
"@
$installTextFileContent | Set-Content "$installTextFile" -Encoding Ascii -Force
& "$env:AGENTCAPABILITIES_USER_INNOSETUP" "$installScriptFile"
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 = "$(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 = "$(ApplicationName)_$($appVersionWithUnderscores)"
$sourcePath = "$env:BUILD_BINARIESDIRECTORY/Application Files/$applicationFolderName"
$zipFile1 = "$env:BUILD_ARTIFACTSTAGINGDIRECTORY/latest.zip"
$zipFile2 = "$env:BUILD_ARTIFACTSTAGINGDIRECTORY/$(ApplicationName)_$($appVersionShort).zip"
Add-Type -Assembly System.IO.Compression.FileSystem
$compressionLevel = [System.IO.Compression.CompressionLevel]::Optimal
[System.IO.Compression.ZipFile]::CreateFromDirectory($sourcePath, $zipFile1, $compressionLevel, $false)
Copy-Item -Path "$zipFile1" -Destination "$zipFile2" -Force
pwsh: true
- task: PublishBuildArtifacts@1
displayName: Publish Artifacts
enabled: true
inputs:
PathtoPublish: '$(Build.ArtifactStagingDirectory)'
ArtifactName: '$(PublishFolder)'

View file

@ -12,221 +12,8 @@ pool:
# vmImage: windows-latest
demands: InnoSetup
variables:
- name: ApplicationName
value: $(Build.DefinitionName)
- name: SolutionFile
value: 'src/Server-Managers.sln'
- name: ProjectFile
value: 'src/$(ApplicationName)/$(ApplicationName).csproj'
- name: BuildPlatform
value: AnyCPU
- name: BuildConfiguration
value: Release
- name: PublishFolder
value: publish
stages:
- stage: build
displayName: Build and Publish
jobs:
- job: build
displayName: Build and Publish
steps:
- task: PowerShell@2
displayName: Create AgentCapabilities Environment Variables
enabled: true
env:
SYSTEM_ACCESSTOKEN: $(System.AccessToken)
inputs:
targetType: filePath
filePath: './.azure/scripts/CreateAgentCapabilitiesEnvironmentVariables.ps1'
arguments: "-CollectionUri '$(System.CollectionUri)' -AgentId '$(Agent.Id)' -AgentName '$(Agent.Name)' -AccessToken '$(System.AccessToken)' -DebugMode $(System.Debug)"
pwsh: true
- task: PowerShell@2
displayName: Output Environment Variables
condition: contains(variables['system.debug'], 'true')
inputs:
targetType: inline
script: '(gci env:*).GetEnumerator() | Sort-Object Name | Out-String'
pwsh: true
- task: NuGetToolInstaller@1
displayName: Install NuGet 4.4.1
inputs:
versionSpec: '4.4.1'
- task: NuGetCommand@2
displayName: NuGet Restore
inputs:
restoreSolution: '$(SolutionFile)'
- task: PowerShell@2
displayName: Apply Semantic Versioning to AssemblyInfo Files
inputs:
targetType: filePath
filePath: './.azure/scripts/ApplySemanticVersioningToAssemblies.ps1'
arguments: "-applicationName $(ApplicationName) -pathToSearch '$(Build.SourcesDirectory)/src' -buildNumber $(Build.BuildNumber) -searchFilter 'AssemblyInfo.*'"
pwsh: true
- task: projectfileprops@1
displayName: Modify ApplicationVersion in Project File
inputs:
path: '$(ProjectFile)'
fieldOptions: ApplicationVersion
value: '$(VersionMajor).$(VersionMinor).$(VersionBuild).%2a'
- task: projectfileprops@1
displayName: Modify ApplicationRevision in Project File
inputs:
path: '$(ProjectFile)'
fieldOptions: ApplicationRevision
value: '$(VersionRevision)'
- task: VSBuild@1
displayName: Build $(ApplicationName) Project
inputs:
solution: '$(ProjectFile)'
msbuildArgs: '/t:publish /p:PublishDir="$(Build.ArtifactStagingDirectory)"'
platform: '$(BuildPlatform)'
configuration: '$(BuildConfiguration)'
clean: true
- task: PowerShell@2
displayName: Cleanup Published Files
env:
BUILD_BUILDNUMBER: $(Build.BuildNumber)
BUILD_ARTIFACTSTAGINGDIRECTORY: $(Build.ArtifactStagingDirectory)
inputs:
targetType: 'inline'
script: |
$appVersion = $env:BUILD_BUILDNUMBER
$appVersionWithUnderscores = $appVersion.Replace('.', '_')
# Remove unwanted files
Remove-Item -Path "$env:BUILD_ARTIFACTSTAGINGDIRECTORY/*.application" -Force -ErrorAction Ignore
Remove-Item -Path "$env:BUILD_ARTIFACTSTAGINGDIRECTORY/*.exe" -Force -ErrorAction Ignore
# Rename application files Folder
$applicationFolders = Get-ChildItem -Path "$env:BUILD_ARTIFACTSTAGINGDIRECTORY\Application Files" -Filter "*_$appVersionWithUnderscores" -Directory -Name
$applicationFolder = $applicationFolders.Where({$_.Replace(' ', '') -eq "$(ApplicationName)_$appVersionWithUnderscores"})
if ($applicationFolder.Count -ne 1) {
throw "Could not find the application folder ($(ApplicationName)_$appVersionWithUnderscores)"
}
$applicationFolderName = $applicationFolder[0]
Rename-Item -Path "$env:BUILD_ARTIFACTSTAGINGDIRECTORY\Application Files\$applicationFolderName" -NewName "$env:BUILD_ARTIFACTSTAGINGDIRECTORY\Application Files\$(ApplicationName)_$appVersionWithUnderscores" -Force
pwsh: true
- task: CopyFiles@2
displayName: Copy Artifact Files
inputs:
SourceFolder: '$(Build.SourcesDirectory)'
Contents: |
src/$(ApplicationName)/VersionFeed.xml
src/$(ApplicationName)/VersionFeedBeta.xml
src/$(ApplicationName)/Art/favicon.ico
src/$(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('.'))
$appVersionWithUnderscores = $appVersion.Replace('.', '_')
$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)
AGENTCAPABILITIES_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('.', '_')
$installScriptFile = ".azure/scripts/$(ApplicationName).iss"
$installTextFile = '.azure/scripts/Installer.txt'
$installTextFileContent = @"
#define AppVer "$appVersionShort"
#define AppVerFull "$appVersion"
#define AppVerPath "$appVersionWithUnderscores"
#define RootPath "$env:BUILD_ARTIFACTSTAGINGDIRECTORY"
"@
$installTextFileContent | Set-Content "$installTextFile" -Encoding Ascii -Force
& "$env:AGENTCAPABILITIES_USER_INNOSETUP" "$installScriptFile"
pwsh: true
- task: PowerShell@2
displayName: Create Duplicate ServerManager Updater File
env:
BUILD_BUILDNUMBER: $(Build.BuildNumber)
BUILD_ARTIFACTSTAGINGDIRECTORY: $(Build.ArtifactStagingDirectory)
inputs:
targetType: 'inline'
script: |
$appVersion = $env:BUILD_BUILDNUMBER
$appVersionWithUnderscores = $appVersion.Replace('.', '_')
$applicationFolderName = "$(ApplicationName)_$($appVersionWithUnderscores)"
$sourcePath = "$env:BUILD_ARTIFACTSTAGINGDIRECTORY/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)
inputs:
targetType: 'inline'
script: |
$appVersion = $env:BUILD_BUILDNUMBER
$appVersionShort = $appVersion.Substring(0, $appVersion.LastIndexOf('.'))
$appVersionWithUnderscores = $appVersion.Replace('.', '_')
$applicationFolderName = "$(ApplicationName)_$($appVersionWithUnderscores)"
$sourcePath = "$env:BUILD_ARTIFACTSTAGINGDIRECTORY/Application Files/$applicationFolderName"
$zipFile1 = "$env:BUILD_ARTIFACTSTAGINGDIRECTORY/latest.zip"
$zipFile2 = "$env:BUILD_ARTIFACTSTAGINGDIRECTORY/$(ApplicationName)_$($appVersionShort).zip"
Add-Type -Assembly System.IO.Compression.FileSystem
$compressionLevel = [System.IO.Compression.CompressionLevel]::Optimal
[System.IO.Compression.ZipFile]::CreateFromDirectory($sourcePath, $zipFile1, $compressionLevel, $false)
Copy-Item -Path "$zipFile1" -Destination "$zipFile2" -Force
pwsh: true
- task: PublishBuildArtifacts@1
displayName: Publish Artifacts
enabled: true
inputs:
PathtoPublish: '$(Build.ArtifactStagingDirectory)'
ArtifactName: '$(PublishFolder)'
- template: azure-pipelines-build.yml@self
- stage: deployBeta
displayName: Beta