ServerManagers/.azure/pipelines/azure-pipelines-discordplugin-build.yml
2022-12-29 19:37:50 +10:00

138 lines
4.7 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@self
- 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: NuGetToolInstaller@1
displayName: Install NuGet 4.4.1
inputs:
versionSpec: '4.4.1'
- task: NuGetCommand@2
displayName: NuGet Restore
inputs:
restoreSolution: '${{parameters.SolutionFile}}'
- template: update-semantic-versioning-in-assembyinfo-files.yml@self
parameters:
ApplicationName: ${{parameters.ApplicationName}}
PathToSearch: '$(Build.SourcesDirectory)/src'
- 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_BINARIESDIRECTORY: $(Build.BinariesDirectory)
inputs:
targetType: inline
script: |
# Remove unwanted files
Remove-Item -Path "$env:BUILD_BINARIESDIRECTORY/ServerManager.Plugin.Common.dll" -Force -ErrorAction Ignore
Remove-Item -Path "$env:BUILD_BINARIESDIRECTORY/*.config" -Force -ErrorAction Ignore
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: 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@self
parameters:
CleanArtifactsFolder: false
CleanBinariesFolder: false
CleanSourcesFolder: false
CleanPublishFolder: false
PublishFolder: ${{parameters.PublishFolder}}