From fe64e5f7ae38cc0d405718d4f62ac500c5e23497 Mon Sep 17 00:00:00 2001 From: Brett Hewitson Date: Thu, 22 Dec 2022 22:04:06 +1000 Subject: [PATCH] pipeline file changes --- .azure/pipelines/azure-pipelines-build.yml | 222 +++++++++++++++++++++ .azure/pipelines/azure-pipelines.yml | 215 +------------------- 2 files changed, 223 insertions(+), 214 deletions(-) diff --git a/.azure/pipelines/azure-pipelines-build.yml b/.azure/pipelines/azure-pipelines-build.yml index 8b137891..00a72602 100644 --- a/.azure/pipelines/azure-pipelines-build.yml +++ b/.azure/pipelines/azure-pipelines-build.yml @@ -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)' diff --git a/.azure/pipelines/azure-pipelines.yml b/.azure/pipelines/azure-pipelines.yml index 2c8092be..2518776f 100644 --- a/.azure/pipelines/azure-pipelines.yml +++ b/.azure/pipelines/azure-pipelines.yml @@ -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