2019-09-02 21:03:41 +00:00
# Starter pipeline
# Start with a minimal pipeline that you can customize to build and deploy your code.
# Add steps that build, run tests, deploy, and more:
# https://aka.ms/yaml
variables :
outputFolder : './_output'
artifactsFolder : './_artifacts'
testsFolder : './_tests'
2019-12-03 01:36:18 +00:00
majorVersion : '3.0.0'
2019-09-02 21:03:41 +00:00
minorVersion : $[counter('minorVersion', 2000)]
radarrVersion : '$(majorVersion).$(minorVersion)'
buildName : '$(Build.SourceBranchName).$(radarrVersion)'
sentryOrg : 'radarr'
2020-03-29 12:23:56 +00:00
dotnetVersion : '3.1.201'
2019-09-02 21:03:41 +00:00
trigger :
branches :
include :
- develop
- aphrodite
pr :
- develop
- aphrodite
stages :
2019-12-24 04:03:04 +00:00
- stage : Setup
displayName : Setup
jobs :
- job :
displayName : Build Variables
pool :
2020-01-24 22:13:10 +00:00
vmImage : 'ubuntu-18.04'
2019-12-24 04:03:04 +00:00
steps :
# Set the build name properly. The 'name' property won't recursively expand so hack here:
- bash : echo "##vso[build.updatebuildnumber]$RADARRVERSION"
displayName : Set Build Name
- bash : |
2020-01-05 05:41:33 +00:00
if [[ $BUILD_REASON == "PullRequest" ]]; then
2020-01-03 20:34:28 +00:00
git diff origin/aphrodite...HEAD --name-only | grep -E "^(src/|azure-pipelines.yml)"
echo $? > not_backend_update
2020-01-05 05:41:33 +00:00
else
echo 0 > not_backend_update
fi
2020-01-03 20:34:28 +00:00
cat not_backend_update
2019-12-24 04:03:04 +00:00
displayName : Check for Backend File Changes
2020-01-03 20:34:28 +00:00
- publish : not_backend_update
artifact : not_backend_update
2019-12-24 04:03:04 +00:00
displayName : Publish update type
2019-09-02 21:03:41 +00:00
- stage : Build_Backend
displayName : Build Backend
2019-12-24 04:03:04 +00:00
dependsOn : Setup
2019-09-02 21:03:41 +00:00
jobs :
- job : Backend
strategy :
matrix :
Linux :
osName : 'Linux'
2020-01-24 22:13:10 +00:00
imageName : 'ubuntu-18.04'
2019-09-02 21:03:41 +00:00
Mac :
osName : 'Mac'
2020-01-24 22:13:10 +00:00
imageName : 'macos-10.14'
2019-09-02 21:03:41 +00:00
Windows :
osName : 'Windows'
2019-10-14 20:21:00 +00:00
imageName : 'windows-2019'
2019-09-02 21:03:41 +00:00
pool :
vmImage : $(imageName)
steps :
- checkout : self
submodules : true
fetchDepth : 1
2019-10-14 20:21:00 +00:00
- task : UseDotNet@2
2019-12-05 21:41:55 +00:00
displayName : 'Install .net core'
2019-10-14 20:20:59 +00:00
inputs :
version : $(dotnetVersion)
2019-10-14 20:21:00 +00:00
- bash : ./build.sh --backend
2019-09-02 21:03:41 +00:00
displayName : Build Radarr Backend
2019-10-14 20:20:59 +00:00
- bash : |
find ${OUTPUTFOLDER} -type f ! -path "*/publish/*" -exec rm -rf {} \;
find ${OUTPUTFOLDER} -depth -empty -type d -exec rm -r "{}" \;
find ${TESTSFOLDER} -type f ! -path "*/publish/*" -exec rm -rf {} \;
find ${TESTSFOLDER} -depth -empty -type d -exec rm -r "{}" \;
displayName : Clean up intermediate output
2020-01-19 19:28:04 +00:00
condition : and(succeeded(), ne(variables['osName'], 'Windows'))
2019-09-02 21:03:41 +00:00
- publish : $(outputFolder)
artifact : '$(osName)Backend'
displayName : Publish Backend
condition : and(succeeded(), eq(variables['osName'], 'Windows'))
2019-12-05 21:41:55 +00:00
- publish : '$(testsFolder)/netcoreapp3.1/win-x64/publish'
2019-10-14 21:42:30 +00:00
artifact : WindowsCoreTests
displayName : Publish Windows Test Package
2019-10-14 20:20:59 +00:00
condition : and(succeeded(), eq(variables['osName'], 'Windows'))
- publish : '$(testsFolder)/net462/linux-x64/publish'
artifact : LinuxTests
2019-10-14 21:42:30 +00:00
displayName : Publish Linux Mono Test Package
2019-10-14 20:20:59 +00:00
condition : and(succeeded(), eq(variables['osName'], 'Windows'))
2019-12-05 21:41:55 +00:00
- publish : '$(testsFolder)/netcoreapp3.1/linux-x64/publish'
2019-10-14 21:42:30 +00:00
artifact : LinuxCoreTests
displayName : Publish Linux Test Package
condition : and(succeeded(), eq(variables['osName'], 'Windows'))
2019-12-05 21:41:55 +00:00
- publish : '$(testsFolder)/netcoreapp3.1/osx-x64/publish'
2019-10-14 21:42:30 +00:00
artifact : MacCoreTests
displayName : Publish MacOS Test Package
2019-09-02 21:03:41 +00:00
condition : and(succeeded(), eq(variables['osName'], 'Windows'))
- stage : Build_Frontend
2019-10-14 20:21:00 +00:00
displayName : Frontend
2019-12-24 04:03:04 +00:00
dependsOn : Setup
2019-09-02 21:03:41 +00:00
jobs :
2019-10-14 20:21:00 +00:00
- job : Build
2019-09-02 21:03:41 +00:00
strategy :
matrix :
Linux :
osName : 'Linux'
2020-01-24 22:13:10 +00:00
imageName : 'ubuntu-18.04'
2019-09-02 21:03:41 +00:00
Mac :
osName : 'Mac'
2020-01-24 22:13:10 +00:00
imageName : 'macos-10.14'
2019-09-02 21:03:41 +00:00
Windows :
osName : 'Windows'
2019-10-14 20:21:00 +00:00
imageName : 'windows-2019'
2019-09-02 21:03:41 +00:00
pool :
vmImage : $(imageName)
steps :
- task : NodeTool@0
displayName : Set Node.js version
inputs :
versionSpec : '10.x'
- checkout : self
submodules : true
fetchDepth : 1
2019-10-14 20:21:00 +00:00
- bash : ./build.sh --frontend
2019-09-02 21:03:41 +00:00
displayName : Build Radarr Frontend
env :
FORCE_COLOR : 0
- publish : $(outputFolder)
artifact : '$(osName)Frontend'
displayName : Publish Frontend
condition : and(succeeded(), eq(variables['osName'], 'Windows'))
2019-10-14 20:21:00 +00:00
- stage : Installer
2019-09-02 21:03:41 +00:00
dependsOn :
- Build_Backend
- Build_Frontend
jobs :
- job : Windows_Installer
displayName : Create Installer
pool :
2019-10-14 20:21:00 +00:00
vmImage : 'windows-2019'
2019-09-02 21:03:41 +00:00
steps :
- checkout : self
fetchDepth : 1
- task : DownloadPipelineArtifact@2
inputs :
buildType : 'current'
artifactName : WindowsBackend
targetPath : _output
displayName : Fetch Backend
- task : DownloadPipelineArtifact@2
inputs :
buildType : 'current'
artifactName : WindowsFrontend
targetPath : _output
displayName : Fetch Frontend
2019-10-14 20:21:00 +00:00
- bash : ./build.sh --packages
2019-09-02 21:03:41 +00:00
displayName : Create Packages
- bash : |
2019-12-05 21:41:55 +00:00
setup/inno/ISCC.exe setup/radarr.iss //DFramework=netcoreapp3.1
cp setup/output/Radarr.*windows.netcoreapp3.1.exe ${BUILD_ARTIFACTSTAGINGDIRECTORY}/Radarr.${BUILDNAME}.windows-core-x64-installer.exe
2019-10-14 21:42:30 +00:00
displayName : Create .NET Core Windows installer
2019-09-02 21:03:41 +00:00
- publish : $(Build.ArtifactStagingDirectory)
artifact : 'WindowsInstaller'
displayName : Publish Installer
2019-10-14 20:21:00 +00:00
- stage : Packages
dependsOn :
- Build_Backend
- Build_Frontend
jobs :
2019-09-02 21:03:41 +00:00
- job : Other_Packages
displayName : Create Standard Packages
pool :
2020-01-24 22:13:10 +00:00
vmImage : 'ubuntu-18.04'
2019-09-02 21:03:41 +00:00
steps :
- checkout : self
fetchDepth : 1
- task : DownloadPipelineArtifact@2
inputs :
buildType : 'current'
artifactName : WindowsBackend
targetPath : _output
displayName : Fetch Backend
- task : DownloadPipelineArtifact@2
inputs :
buildType : 'current'
artifactName : WindowsFrontend
targetPath : _output
displayName : Fetch Frontend
2019-10-14 20:21:00 +00:00
- bash : ./build.sh --packages
2019-09-02 21:03:41 +00:00
displayName : Create Packages
- bash : |
2019-10-14 20:21:00 +00:00
find . -name "Radarr" -exec chmod a+x {} \;
find . -name "Radarr.Update" -exec chmod a+x {} \;
displayName : Set executable bits
2019-09-02 21:03:41 +00:00
- task : ArchiveFiles@2
2019-10-14 21:42:30 +00:00
displayName : Create Windows Core zip
2019-09-02 21:03:41 +00:00
inputs :
2019-10-14 21:42:30 +00:00
archiveFile : '$(Build.ArtifactStagingDirectory)/Radarr.$(buildName).windows-core-x64.zip'
2019-09-02 21:03:41 +00:00
archiveType : 'zip'
includeRootFolder : false
2019-12-05 21:41:55 +00:00
rootFolderOrFile : $(artifactsFolder)/windows/netcoreapp3.1
2019-09-02 21:03:41 +00:00
- task : ArchiveFiles@2
2019-10-14 21:42:30 +00:00
displayName : Create MacOS Core app
2019-09-02 21:03:41 +00:00
inputs :
2019-10-14 21:42:30 +00:00
archiveFile : '$(Build.ArtifactStagingDirectory)/Radarr.$(buildName).osx-app-core-x64.zip'
2019-09-02 21:03:41 +00:00
archiveType : 'zip'
includeRootFolder : false
2019-12-05 21:41:55 +00:00
rootFolderOrFile : $(artifactsFolder)/macos-app/netcoreapp3.1
2019-09-02 21:03:41 +00:00
- task : ArchiveFiles@2
2019-10-14 21:42:30 +00:00
displayName : Create MacOS Core tar
2019-09-02 21:03:41 +00:00
inputs :
2019-10-14 21:42:30 +00:00
archiveFile : '$(Build.ArtifactStagingDirectory)/Radarr.$(buildName).osx-core-x64.tar.gz'
2019-09-02 21:03:41 +00:00
archiveType : 'tar'
tarCompression : 'gz'
includeRootFolder : false
2019-12-05 21:41:55 +00:00
rootFolderOrFile : $(artifactsFolder)/macos/netcoreapp3.1
2019-09-02 21:03:41 +00:00
- task : ArchiveFiles@2
2019-10-14 21:42:30 +00:00
displayName : Create Linux Mono tar
2019-09-02 21:03:41 +00:00
inputs :
2019-10-14 20:21:00 +00:00
archiveFile : '$(Build.ArtifactStagingDirectory)/Radarr.$(buildName).linux.tar.gz'
2019-09-02 21:03:41 +00:00
archiveType : 'tar'
tarCompression : 'gz'
includeRootFolder : false
2019-10-14 20:21:00 +00:00
rootFolderOrFile : $(artifactsFolder)/linux-x64/net462
2019-10-14 21:42:30 +00:00
- task : ArchiveFiles@2
displayName : Create Linux Core tar
inputs :
archiveFile : '$(Build.ArtifactStagingDirectory)/Radarr.$(buildName).linux-core-x64.tar.gz'
archiveType : 'tar'
tarCompression : 'gz'
includeRootFolder : false
2019-12-05 21:41:55 +00:00
rootFolderOrFile : $(artifactsFolder)/linux-x64/netcoreapp3.1
2019-10-14 21:42:30 +00:00
- task : ArchiveFiles@2
displayName : Create ARM32 Linux Core tar
inputs :
archiveFile : '$(Build.ArtifactStagingDirectory)/Radarr.$(buildName).linux-core-arm.tar.gz'
archiveType : 'tar'
tarCompression : 'gz'
includeRootFolder : false
2019-12-05 21:41:55 +00:00
rootFolderOrFile : $(artifactsFolder)/linux-arm/netcoreapp3.1
2019-10-14 21:42:30 +00:00
- task : ArchiveFiles@2
displayName : Create ARM64 Linux Core tar
inputs :
archiveFile : '$(Build.ArtifactStagingDirectory)/Radarr.$(buildName).linux-core-arm64.tar.gz'
archiveType : 'tar'
tarCompression : 'gz'
includeRootFolder : false
2019-12-05 21:41:55 +00:00
rootFolderOrFile : $(artifactsFolder)/linux-arm64/netcoreapp3.1
2019-09-02 21:03:41 +00:00
- publish : $(Build.ArtifactStagingDirectory)
artifact : 'Packages'
displayName : Publish Packages
- bash : |
echo "Uploading source maps to sentry"
curl -sL https://sentry.io/get-cli/ | bash
RELEASENAME="${RADARRVERSION}-${BUILD_SOURCEBRANCHNAME}"
2019-12-23 21:53:23 +00:00
sentry-cli releases new --finalize -p radarr3 -p radarr3-ui -p radarr-update "${RELEASENAME}"
sentry-cli releases -p radarr3-ui files "${RELEASENAME}" upload-sourcemaps _output/UI/ --rewrite
2019-09-02 21:03:41 +00:00
sentry-cli releases set-commits --auto "${RELEASENAME}"
2019-09-04 04:28:53 +00:00
sentry-cli releases deploys "${RELEASENAME}" new -e aphrodite
2020-04-22 18:18:38 +00:00
if [ $? -gt 0 ]; then
2020-04-22 18:02:16 +00:00
echo "##vso[task.logissue type=warning]Error uploading source maps."
fi
exit 0
2019-09-02 21:03:41 +00:00
displayName : Publish Sentry Source Maps
2020-02-23 01:03:43 +00:00
continueOnError : true
2019-09-04 04:28:53 +00:00
condition : and(succeeded(), eq(variables['Build.SourceBranch'], 'refs/heads/aphrodite'))
2019-09-02 21:03:41 +00:00
env :
2019-12-23 20:17:58 +00:00
SENTRY_AUTH_TOKEN : $(sentryAuthTokenSelfHosted)
2019-09-02 21:03:41 +00:00
SENTRY_ORG : $(sentryOrg)
2019-12-23 20:17:58 +00:00
SENTRY_URL : https://sentry.radarr.video
2019-09-02 21:03:41 +00:00
- stage : Unit_Test
displayName : Unit Tests
dependsOn : Build_Backend
2019-12-24 04:03:04 +00:00
2019-09-02 21:03:41 +00:00
jobs :
2019-12-24 04:03:04 +00:00
- job : Prepare
pool :
2020-01-24 22:13:10 +00:00
vmImage : 'ubuntu-18.04'
2019-12-24 04:03:04 +00:00
steps :
- checkout : none
- task : DownloadPipelineArtifact@2
inputs :
buildType : 'current'
2020-01-03 20:34:28 +00:00
artifactName : 'not_backend_update'
2019-12-24 04:03:04 +00:00
targetPath : '.'
2020-01-03 20:34:28 +00:00
- bash : echo "##vso[task.setvariable variable=backendNotUpdated;isOutput=true]$(cat not_backend_update)"
2019-12-24 04:03:04 +00:00
name : setVar
2019-09-02 21:03:41 +00:00
- job : Unit
2019-10-14 20:21:00 +00:00
displayName : Unit Native
2019-12-24 04:03:04 +00:00
dependsOn : Prepare
2020-01-03 20:34:28 +00:00
condition : and(succeeded(), eq(dependencies.Prepare.outputs['setVar.backendNotUpdated'], '0'))
2019-12-24 04:03:04 +00:00
2019-09-02 21:03:41 +00:00
strategy :
matrix :
2019-10-14 21:42:30 +00:00
MacCore :
2019-09-02 21:03:41 +00:00
osName : 'Mac'
2019-10-14 21:42:30 +00:00
testName : 'MacCore'
2020-01-24 22:13:10 +00:00
imageName : 'macos-10.14'
2019-10-14 21:42:30 +00:00
WindowsCore :
2019-09-02 21:03:41 +00:00
osName : 'Windows'
2019-10-14 21:42:30 +00:00
testName : 'WindowsCore'
2019-10-14 20:21:00 +00:00
imageName : 'windows-2019'
2019-10-14 21:42:30 +00:00
LinuxCore :
osName : 'Linux'
testName : 'LinuxCore'
2020-01-24 22:13:10 +00:00
imageName : 'ubuntu-18.04'
2019-10-14 21:42:30 +00:00
pattern : 'Radarr.**.linux-core-x64.tar.gz'
2019-09-02 21:03:41 +00:00
pool :
vmImage : $(imageName)
steps :
- checkout : none
2019-10-14 21:42:30 +00:00
- task : UseDotNet@2
2019-12-05 21:41:55 +00:00
displayName : 'Install .net core'
2019-10-14 21:42:30 +00:00
inputs :
version : $(dotnetVersion)
2019-09-02 21:03:41 +00:00
- task : DownloadPipelineArtifact@2
displayName : Download Test Artifact
inputs :
buildType : 'current'
2019-10-14 21:42:30 +00:00
artifactName : '$(testName)Tests'
2019-09-02 21:03:41 +00:00
targetPath : $(testsFolder)
2019-09-03 02:22:25 +00:00
- bash : |
2020-01-22 21:47:33 +00:00
wget https://mediaarea.net/repo/deb/repo-mediaarea_1.0-11_all.deb
sudo dpkg -i repo-mediaarea_1.0-11_all.deb
2019-09-03 02:22:25 +00:00
sudo apt-get update
2020-01-22 21:47:33 +00:00
sudo apt-get install -y --allow-unauthenticated libmediainfo-dev libmediainfo0v5 mediainfo
2019-10-14 20:21:00 +00:00
displayName : Install mediainfo
2019-09-03 02:22:25 +00:00
condition : and(succeeded(), eq(variables['osName'], 'Linux'))
2019-09-02 21:03:41 +00:00
- powershell : Set-Service SCardSvr -StartupType Manual
displayName : Enable Windows Test Service
condition : and(succeeded(), eq(variables['osName'], 'Windows'))
2019-10-14 21:42:30 +00:00
- bash : |
wget https://github.com/acoustid/chromaprint/releases/download/v1.4.3/chromaprint-fpcalc-1.4.3-linux-x86_64.tar.gz
sudo tar xf chromaprint-fpcalc-1.4.3-linux-x86_64.tar.gz --strip-components=1 --directory /usr/bin
displayName : Install fpcalc
condition : and(succeeded(), eq(variables['osName'], 'Linux'))
2019-10-14 20:21:00 +00:00
- bash : |
2020-01-24 22:13:10 +00:00
SYMLINK=6_6_0
2019-10-14 20:21:00 +00:00
MONOPREFIX=/Library/Frameworks/Mono.framework/Versions/$SYMLINK
echo "##vso[task.setvariable variable=MONOPREFIX;]$MONOPREFIX"
echo "##vso[task.setvariable variable=PKG_CONFIG_PATH;]$MONOPREFIX/lib/pkgconfig:$MONOPREFIX/share/pkgconfig:$PKG_CONFIG_PATH"
echo "##vso[task.setvariable variable=PATH;]$MONOPREFIX/bin:$PATH"
displayName : Set Mono Version
condition : and(succeeded(), eq(variables['osName'], 'Mac'))
2019-10-14 20:20:59 +00:00
- bash : find ${TESTSFOLDER} -name "Radarr.Test.Dummy" -exec chmod a+x {} \;
displayName : Make Test Dummy Executable
2020-01-19 19:28:04 +00:00
condition : and(succeeded(), ne(variables['osName'], 'Windows'))
2020-02-25 22:17:55 +00:00
- bash : |
chmod a+x ${TESTSFOLDER}/test.sh
${TESTSFOLDER}/test.sh ${OSNAME} Unit Test
2019-09-02 21:03:41 +00:00
displayName : Run Tests
env :
TEST_DIR : $(Build.SourcesDirectory)/_tests
- task : PublishTestResults@2
displayName : Publish Test Results
inputs :
testResultsFormat : 'NUnit'
testResultsFiles : '**/TestResult.xml'
2019-10-14 21:42:30 +00:00
testRunTitle : '$(testName) Unit Tests'
2019-10-14 20:21:00 +00:00
failTaskOnFailedTests : true
- job : Unit_Docker
displayName : Unit Docker
2019-12-24 04:03:04 +00:00
dependsOn : Prepare
2020-01-03 20:34:28 +00:00
condition : and(succeeded(), eq(dependencies.Prepare.outputs['setVar.backendNotUpdated'], '0'))
2019-10-14 20:21:00 +00:00
strategy :
matrix :
mono510 :
testName : 'Mono 5.10'
2020-03-07 03:25:49 +00:00
containerImage : servarr/testimages:mono-5.10
2019-10-14 20:21:00 +00:00
mono520 :
testName : 'Mono 5.20'
2020-03-07 03:25:49 +00:00
containerImage : servarr/testimages:mono-5.20
2019-12-22 21:42:56 +00:00
mono608 :
testName : 'Mono 6.8'
2020-03-07 03:25:49 +00:00
containerImage : servarr/testimages:mono-6.8
2020-01-20 22:00:25 +00:00
mono610 :
testName : 'Mono 6.10'
2020-03-07 03:25:49 +00:00
containerImage : servarr/testimages:mono-6.10
2019-10-14 20:21:00 +00:00
pool :
2020-01-24 22:13:10 +00:00
vmImage : 'ubuntu-18.04'
2019-10-14 20:21:00 +00:00
container : $[ variables['containerImage'] ]
2019-09-02 21:03:41 +00:00
2019-10-14 20:21:00 +00:00
timeoutInMinutes : 10
steps :
- bash : mono --version
displayName : Check Mono version
2019-10-14 21:42:30 +00:00
- task : UseDotNet@2
2019-12-05 21:41:55 +00:00
displayName : 'Install .net core'
2019-10-14 21:42:30 +00:00
inputs :
version : $(dotnetVersion)
2019-10-14 20:21:00 +00:00
- checkout : none
- task : DownloadPipelineArtifact@2
displayName : Download Test Artifact
inputs :
buildType : 'current'
artifactName : LinuxTests
targetPath : $(testsFolder)
2020-02-25 22:17:55 +00:00
- bash : |
chmod a+x ${TESTSFOLDER}/test.sh
${TESTSFOLDER}/test.sh Linux Unit Test
2019-10-14 20:21:00 +00:00
displayName : Run Tests
- task : PublishTestResults@2
displayName : Publish Test Results
inputs :
testResultsFormat : 'NUnit'
testResultsFiles : '**/TestResult.xml'
testRunTitle : '$(testName) Unit Tests'
failTaskOnFailedTests : true
- stage : Integration
displayName : Integration
dependsOn : Packages
2019-12-24 04:03:04 +00:00
2019-09-02 21:03:41 +00:00
jobs :
2019-12-24 04:03:04 +00:00
- job : Prepare
pool :
2020-01-24 22:13:10 +00:00
vmImage : 'ubuntu-18.04'
2019-12-24 04:03:04 +00:00
steps :
- checkout : none
- task : DownloadPipelineArtifact@2
inputs :
buildType : 'current'
2020-01-03 20:34:28 +00:00
artifactName : 'not_backend_update'
2019-12-24 04:03:04 +00:00
targetPath : '.'
2020-01-03 20:34:28 +00:00
- bash : echo "##vso[task.setvariable variable=backendNotUpdated;isOutput=true]$(cat not_backend_update)"
2019-12-24 04:03:04 +00:00
name : setVar
2019-10-14 20:21:00 +00:00
- job : Integration_Native
displayName : Integration Native
2019-12-24 04:03:04 +00:00
dependsOn : Prepare
2020-01-03 20:34:28 +00:00
condition : and(succeeded(), eq(dependencies.Prepare.outputs['setVar.backendNotUpdated'], '0'))
2019-09-02 21:03:41 +00:00
strategy :
matrix :
2019-10-14 21:42:30 +00:00
MacCore :
2019-09-02 21:03:41 +00:00
osName : 'Mac'
2019-10-14 21:42:30 +00:00
testName : 'MacCore'
2020-01-24 22:13:10 +00:00
imageName : 'macos-10.14'
2019-10-14 21:42:30 +00:00
pattern : 'Radarr.**.osx-core-x64.tar.gz'
WindowsCore :
2019-09-02 21:03:41 +00:00
osName : 'Windows'
2019-10-14 21:42:30 +00:00
testName : 'WindowsCore'
2019-10-14 20:21:00 +00:00
imageName : 'windows-2019'
2019-10-14 21:42:30 +00:00
pattern : 'Radarr.**.windows-core-x64.zip'
LinuxCore :
osName : 'Linux'
testName : 'LinuxCore'
2020-01-24 22:13:10 +00:00
imageName : 'ubuntu-18.04'
2019-10-14 21:42:30 +00:00
pattern : 'Radarr.**.linux-core-x64.tar.gz'
2019-09-02 21:03:41 +00:00
pool :
vmImage : $(imageName)
steps :
- bash : |
2020-01-24 22:13:10 +00:00
SYMLINK=6_6_0
2019-09-02 21:03:41 +00:00
MONOPREFIX=/Library/Frameworks/Mono.framework/Versions/$SYMLINK
2019-10-14 20:21:00 +00:00
echo "##vso[task.setvariable variable=MONOPREFIX;]$MONOPREFIX"
2019-09-02 21:03:41 +00:00
echo "##vso[task.setvariable variable=PKG_CONFIG_PATH;]$MONOPREFIX/lib/pkgconfig:$MONOPREFIX/share/pkgconfig:$PKG_CONFIG_PATH"
echo "##vso[task.setvariable variable=PATH;]$MONOPREFIX/bin:$PATH"
displayName : Set Mono Version
condition : and(succeeded(), eq(variables['osName'], 'Mac'))
2019-10-14 21:42:30 +00:00
- task : UseDotNet@2
2019-12-05 21:41:55 +00:00
displayName : 'Install .net core'
2019-10-14 21:42:30 +00:00
inputs :
version : $(dotnetVersion)
2019-09-02 21:03:41 +00:00
- checkout : none
- task : DownloadPipelineArtifact@2
displayName : Download Test Artifact
inputs :
buildType : 'current'
2019-10-14 21:42:30 +00:00
artifactName : '$(testName)Tests'
2019-09-02 21:03:41 +00:00
targetPath : $(testsFolder)
- task : DownloadPipelineArtifact@2
displayName : Download Build Artifact
inputs :
buildType : 'current'
artifactName : Packages
itemPattern : '**/$(pattern)'
targetPath : $(Build.ArtifactStagingDirectory)
- task : ExtractFiles@1
inputs :
archiveFilePatterns : '$(Build.ArtifactStagingDirectory)/**/$(pattern)'
destinationFolder : '$(Build.ArtifactStagingDirectory)/bin'
displayName : Extract Package
- bash : |
mkdir -p ./bin/
cp -r -v ${BUILD_ARTIFACTSTAGINGDIRECTORY}/bin/Radarr/. ./bin/
displayName : Move Package Contents
2020-02-25 22:17:55 +00:00
- bash : |
chmod a+x ${TESTSFOLDER}/test.sh
${TESTSFOLDER}/test.sh ${OSNAME} Integration Test
2019-09-02 21:03:41 +00:00
displayName : Run Integration Tests
- task : PublishTestResults@2
inputs :
testResultsFormat : 'NUnit'
testResultsFiles : '**/TestResult.xml'
2019-10-14 21:42:30 +00:00
testRunTitle : '$(testName) Integration Tests'
2019-09-02 21:03:41 +00:00
failTaskOnFailedTests : true
displayName : Publish Test Results
2019-10-14 20:21:00 +00:00
- job : Integration_Docker
displayName : Integration Docker
2019-12-24 04:03:04 +00:00
dependsOn : Prepare
2020-01-03 20:34:28 +00:00
condition : and(succeeded(), eq(dependencies.Prepare.outputs['setVar.backendNotUpdated'], '0'))
2019-10-14 20:21:00 +00:00
strategy :
matrix :
mono510 :
testName : 'Mono 5.10'
2020-03-07 03:25:49 +00:00
containerImage : servarr/testimages:mono-5.10
2019-10-14 20:21:00 +00:00
mono520 :
testName : 'Mono 5.20'
2020-03-07 03:25:49 +00:00
containerImage : servarr/testimages:mono-5.20
2019-12-22 21:42:56 +00:00
mono608 :
testName : 'Mono 6.8'
2020-03-07 03:25:49 +00:00
containerImage : servarr/testimages:mono-6.8
2020-01-20 22:00:25 +00:00
mono610 :
testName : 'Mono 6.10'
2020-03-07 03:25:49 +00:00
containerImage : servarr/testimages:mono-6.10
2019-10-14 20:21:00 +00:00
2019-10-14 20:21:00 +00:00
variables :
pattern : 'Radarr.**.linux.tar.gz'
pool :
2020-01-24 22:13:10 +00:00
vmImage : 'ubuntu-18.04'
2019-10-14 20:21:00 +00:00
container : $[ variables['containerImage'] ]
2019-10-14 20:21:00 +00:00
timeoutInMinutes : 15
2019-10-14 20:21:00 +00:00
steps :
- bash : mono --version
displayName : Check Mono version
2019-10-14 21:42:30 +00:00
- task : UseDotNet@2
2019-12-05 21:41:55 +00:00
displayName : 'Install .net core'
2019-10-14 21:42:30 +00:00
inputs :
version : $(dotnetVersion)
2019-10-14 20:21:00 +00:00
- checkout : none
- task : DownloadPipelineArtifact@2
displayName : Download Test Artifact
inputs :
buildType : 'current'
2019-10-14 21:42:30 +00:00
artifactName : LinuxTests
2019-10-14 20:21:00 +00:00
targetPath : $(testsFolder)
- task : DownloadPipelineArtifact@2
displayName : Download Build Artifact
inputs :
buildType : 'current'
artifactName : Packages
itemPattern : '**/$(pattern)'
targetPath : $(Build.ArtifactStagingDirectory)
- task : ExtractFiles@1
inputs :
archiveFilePatterns : '$(Build.ArtifactStagingDirectory)/**/$(pattern)'
destinationFolder : '$(Build.ArtifactStagingDirectory)/bin'
displayName : Extract Package
- bash : |
mkdir -p ./bin/
cp -r -v ${BUILD_ARTIFACTSTAGINGDIRECTORY}/bin/Radarr/. ./bin/
displayName : Move Package Contents
2020-02-25 22:17:55 +00:00
- bash : |
chmod a+x ${TESTSFOLDER}/test.sh
${TESTSFOLDER}/test.sh Linux Integration Test
2019-10-14 20:21:00 +00:00
displayName : Run Integration Tests
- task : PublishTestResults@2
inputs :
testResultsFormat : 'NUnit'
testResultsFiles : '**/TestResult.xml'
testRunTitle : '$(testName) Integration Tests'
failTaskOnFailedTests : true
displayName : Publish Test Results
2019-10-14 20:21:00 +00:00
- stage : Automation
displayName : Automation
dependsOn : Packages
jobs :
2019-09-02 21:03:41 +00:00
- job : Automation
strategy :
matrix :
Linux :
osName : 'Linux'
2020-01-24 22:13:10 +00:00
imageName : 'ubuntu-18.04'
2019-10-14 21:42:30 +00:00
pattern : 'Radarr.**.linux-core-x64.tar.gz'
2019-09-02 21:03:41 +00:00
failBuild : true
Mac :
osName : 'Mac'
2020-01-24 22:13:10 +00:00
imageName : 'macos-10.14' # Fails due to firefox not being installed on image
2019-10-14 21:42:30 +00:00
pattern : 'Radarr.**.osx-core-x64.tar.gz'
2019-09-02 21:03:41 +00:00
failBuild : false
Windows :
osName : 'Windows'
2019-10-14 20:21:00 +00:00
imageName : 'windows-2019'
2019-10-14 21:42:30 +00:00
pattern : 'Radarr.**.windows-core-x64.zip'
2019-09-02 21:03:41 +00:00
failBuild : true
pool :
vmImage : $(imageName)
steps :
2019-10-14 21:42:30 +00:00
- task : UseDotNet@2
2019-12-05 21:41:55 +00:00
displayName : 'Install .net core'
2019-10-14 21:42:30 +00:00
inputs :
version : $(dotnetVersion)
2019-09-02 21:03:41 +00:00
- checkout : none
- task : DownloadPipelineArtifact@2
displayName : Download Test Artifact
inputs :
buildType : 'current'
2019-10-14 21:42:30 +00:00
artifactName : '$(osName)CoreTests'
2019-09-02 21:03:41 +00:00
targetPath : $(testsFolder)
- task : DownloadPipelineArtifact@2
displayName : Download Build Artifact
inputs :
buildType : 'current'
artifactName : Packages
itemPattern : '**/$(pattern)'
targetPath : $(Build.ArtifactStagingDirectory)
- task : ExtractFiles@1
inputs :
archiveFilePatterns : '$(Build.ArtifactStagingDirectory)/**/$(pattern)'
destinationFolder : '$(Build.ArtifactStagingDirectory)/bin'
displayName : Extract Package
- bash : |
mkdir -p ./bin/
cp -r -v ${BUILD_ARTIFACTSTAGINGDIRECTORY}/bin/Radarr/. ./bin/
displayName : Move Package Contents
- bash : |
if [[ $OSNAME == "Mac" ]]; then
2019-12-07 07:37:11 +00:00
url=https://github.com/mozilla/geckodriver/releases/download/v0.26.0/geckodriver-v0.26.0-macos.tar.gz
2019-09-02 21:03:41 +00:00
elif [[ $OSNAME == "Linux" ]]; then
2019-12-07 07:37:11 +00:00
url=https://github.com/mozilla/geckodriver/releases/download/v0.26.0/geckodriver-v0.26.0-linux64.tar.gz
2019-09-02 21:03:41 +00:00
else
echo "Unhandled OS"
exit 1
fi
curl -s -L "$url" | tar -xz
chmod +x geckodriver
mv geckodriver _tests
displayName : Install Gecko Driver
condition : and(succeeded(), ne(variables['osName'], 'Windows'))
2020-02-25 22:17:55 +00:00
- bash : |
chmod a+x ${TESTSFOLDER}/test.sh
${TESTSFOLDER}/test.sh ${OSNAME} Automation Test
displayName : Run Integration Tests
2019-09-02 21:03:41 +00:00
- task : PublishTestResults@2
inputs :
testResultsFormat : 'NUnit'
testResultsFiles : '**/TestResult.xml'
testRunTitle : '$(osName) Automation Tests'
failTaskOnFailedTests : $(failBuild)
displayName : Publish Test Results
2019-10-14 20:21:00 +00:00
- stage : Analyze
2019-12-24 04:03:04 +00:00
dependsOn :
- Setup
2019-10-14 20:21:00 +00:00
displayName : Analyze
jobs :
2019-12-24 04:03:04 +00:00
- job : Prepare
pool :
2020-01-24 22:13:10 +00:00
vmImage : 'ubuntu-18.04'
2019-12-24 04:03:04 +00:00
steps :
- checkout : none
- task : DownloadPipelineArtifact@2
inputs :
buildType : 'current'
2020-01-03 20:34:28 +00:00
artifactName : 'not_backend_update'
2019-12-24 04:03:04 +00:00
targetPath : '.'
2020-01-03 20:34:28 +00:00
- bash : echo "##vso[task.setvariable variable=backendNotUpdated;isOutput=true]$(cat not_backend_update)"
2019-12-24 04:03:04 +00:00
name : setVar
2019-10-14 20:21:00 +00:00
- job : Lint_Frontend
displayName : Lint Frontend
strategy :
matrix :
Linux :
osName : 'Linux'
2020-01-24 22:13:10 +00:00
imageName : 'ubuntu-18.04'
2019-10-14 20:21:00 +00:00
Windows :
osName : 'Windows'
imageName : 'windows-2019'
pool :
vmImage : $(imageName)
steps :
- task : NodeTool@0
displayName : Set Node.js version
inputs :
versionSpec : '10.x'
- checkout : self
submodules : true
fetchDepth : 1
- bash : ./build.sh --lint
displayName : Lint Radarr Frontend
env :
FORCE_COLOR : 0
2019-12-07 07:37:11 +00:00
- job : Analyze_Frontend
displayName : Frontend
2019-12-10 02:48:14 +00:00
condition : eq(variables['System.PullRequest.IsFork'], 'False')
2019-12-07 07:37:11 +00:00
pool :
vmImage : windows-2019
steps :
- checkout : self # Need history for Sonar analysis
- task : SonarCloudPrepare@1
env :
SONAR_SCANNER_OPTS : ''
inputs :
SonarCloud : 'SonarCloud'
organization : 'radarr'
scannerMode : 'CLI'
configMode : 'manual'
cliProjectKey : 'Radarr_Radarr.UI'
2019-12-10 02:48:14 +00:00
cliProjectName : 'RadarrUI'
2019-12-07 07:37:11 +00:00
cliProjectVersion : '$(radarrVersion)'
cliSources : './frontend'
- task : SonarCloudAnalyze@1
2019-09-02 21:03:41 +00:00
2019-12-07 07:37:11 +00:00
- job : Analyze_Backend
displayName : Backend
2019-12-24 04:03:04 +00:00
dependsOn : Prepare
2020-01-03 20:34:28 +00:00
condition : and(succeeded(), eq(dependencies.Prepare.outputs['setVar.backendNotUpdated'], '0'))
2019-12-24 04:03:04 +00:00
2019-12-07 07:37:11 +00:00
variables :
disable.coverage.autogenerate : 'true'
2019-12-24 04:03:04 +00:00
pool :
vmImage : windows-2019
2019-12-07 07:37:11 +00:00
steps :
- task : UseDotNet@2
displayName : 'Install .net core'
inputs :
version : $(dotnetVersion)
- checkout : self # Need history for Sonar analysis
submodules : true
- powershell : Set-Service SCardSvr -StartupType Manual
displayName : Enable Windows Test Service
- task : SonarCloudPrepare@1
2019-12-10 02:48:14 +00:00
condition : eq(variables['System.PullRequest.IsFork'], 'False')
2019-12-07 07:37:11 +00:00
inputs :
SonarCloud : 'SonarCloud'
organization : 'radarr'
scannerMode : 'MSBuild'
projectKey : 'Radarr_Radarr'
projectName : 'Radarr'
projectVersion : '$(radarrVersion)'
extraProperties : |
sonar.exclusions=**/obj/**,**/*.dll,**/NzbDrone.Core.Test/Files/**/*,./frontend/**,**/ExternalModules/**,./src/Libraries/**
2019-12-24 21:43:47 +00:00
sonar.coverage.exclusions=**/Radarr.Api.V3/**/*,**/NzbDrone.Api/**/*,**/MonoTorrent/**/*,**/Marr.Data/**/*
2019-12-07 07:37:11 +00:00
sonar.cs.opencover.reportsPaths=$(Build.SourcesDirectory)/CoverageResults/**/coverage.opencover.xml
sonar.cs.nunit.reportsPaths=$(Build.SourcesDirectory)/TestResult.xml
- bash : |
./build.sh --backend -f netcoreapp3.1 -r win-x64
TEST_DIR=_tests/netcoreapp3.1/win-x64/publish/ ./test.sh Windows Unit Coverage
displayName : Coverage Unit Tests
- task : SonarCloudAnalyze@1
2019-12-10 02:48:14 +00:00
condition : eq(variables['System.PullRequest.IsFork'], 'False')
2019-12-07 07:37:11 +00:00
displayName : Publish SonarCloud Results
- task : reportgenerator@4
displayName : Generate Coverage Report
inputs :
reports : '$(Build.SourcesDirectory)/CoverageResults/**/coverage.opencover.xml'
targetdir : '$(Build.SourcesDirectory)/CoverageResults/combined'
reporttypes : 'HtmlInline_AzurePipelines;Cobertura;Badges'
- task : PublishCodeCoverageResults@1
displayName : Publish Coverage Report
inputs :
codeCoverageTool : 'cobertura'
summaryFileLocation : './CoverageResults/combined/Cobertura.xml'
2019-12-22 21:42:56 +00:00
reportDirectory : './CoverageResults/combined/'
2020-04-22 21:04:43 +00:00
- stage : Report_Out
dependsOn :
- Analyze
- Unit_Test
- Integration
- Automation
condition : always()
displayName : Build Status Report
jobs :
- job :
displayName : Discord Notification
pool :
vmImage : 'ubuntu-18.04'
steps :
- checkout : none
- bash : |
env | sort
if [[ $BUILD_REASON == "PullRequest" ]]; then
echo "##vso[task.setvariable variable=buildTypeString][PR $SYSTEM_PULLREQUEST_PULLREQUESTNUMBER]($SYSTEM_PULLREQUEST_SOURCEREPOSITORYURI/pull/$SYSTEM_PULLREQUEST_PULLREQUESTNUMBER) to \`$SYSTEM_PULLREQUEST_TARGETBRANCH\` from \`$SYSTEM_PULLREQUEST_SOURCEBRANCH\`"
COMMIT_SHORT=$(echo $SYSTEM_PULLREQUEST_SOURCECOMMITID | cut -c1-7)
echo "##vso[task.setvariable variable=commitUrl]$SYSTEM_PULLREQUEST_SOURCEREPOSITORYURI/commit/$SYSTEM_PULLREQUEST_SOURCECOMMITID"
else
echo "##vso[task.setvariable variable=buildTypeString]Mainline Branch '$BUILD_SOURCEBRANCHNAME'"
COMMIT_SHORT=$(echo $BUILD_SOURCEVERSION | cut -c1-7)
echo "##vso[task.setvariable variable=commitUrl]$SYSTEM_PULLREQUEST_SOURCEREPOSITORYURI/commit/$BUILD_SOURCEVERSION"
fi
echo "##vso[task.setvariable variable=commitString]$COMMIT_SHORT"
- powershell : |
$bearer_token = "$env:SYSTEM_ACCESSTOKEN"
$headers = @{Authorization = 'Basic ' + [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(":$($bearer_token)")) }
$url = "https://dev.azure.com/Radarr/Radarr/_apis/test/runs?buildUri=$env:BUILD_BUILDURI&api-version=5.1"
$response = (Invoke-RestMethod -Uri $url -Headers $headers).value
$passed_tests = $response | Select passedTests | Measure-Object -Sum PassedTests | Select-Object -expand Sum
$failed_tests = $response | Select unanalyzedTests | Measure-Object -Sum UnanalyzedTests | Select-Object -expand Sum
$skipped_tests = $response | Select notApplicableTests | Measure-Object -Sum NotApplicableTests | Select-Object -expand Sum
$url1 = "https://dev.azure.com/Radarr/Radarr/_apis/test/codeCoverage?buildId=$env:BUILD_BUILDID&api-version=5.1-preview"
$response1 = (Invoke-RestMethod -Uri $url1 -Headers $headers).coverageData.coverageStats
$total_lines = $response1 | Where-Object {$_.Label -eq "Lines"} | Select-Object -expand Total
$covered_lines = $response1 | Where-Object {$_.Label -eq "Lines"} | Select-Object -expand Covered
$coverage_percent = [math]::Round($covered_lines/$total_lines*100,2)
$url2 = "https://dev.azure.com/Radarr/Radarr/_apis/build/builds/$env:BUILD_BUILDID/timeline/?api-version=5.1"
$response2 = (Invoke-RestMethod -Uri $url2 -Headers $headers).records
$failed_tasks = $response2 | Where-Object {$_.Result -eq "failed"} | Measure-Object | Select-Object -expand Count
$error_count = $response2 | Select errorCount | Measure-Object -Sum ErrorCount | Select-Object -expand Sum
$warning_count = $response2 | Select warningCount | Measure-Object -Sum WarningCount | Select-Object -expand Sum
if($failed_tasks -gt 0) {
$status_message = "Failed"
Write-Host "##vso[task.setvariable variable=statusColor;]15158332"
}else {
$status_message = "Success"
Write-Host "##vso[task.setvariable variable=statusColor;]3066993"
}
Write-Host "##vso[task.setvariable variable=testResultString;]$passed_tests Passed, $failed_tests Failed, $skipped_tests Skipped"
Write-Host "##vso[task.setvariable variable=coverageString;]$coverage_percent% ($covered_lines of $total_lines lines)"
Write-Host "##vso[task.setvariable variable=statusString;]$status_message ($error_count Errors, $warning_count Warning)"
env :
SYSTEM_ACCESSTOKEN : $(System.AccessToken)
- task : ado-discord-webhook@1
displayName : Send Webhook Payload
inputs :
channelId : $(discordChannelId)
webhookKey : $(discordWebhookKey)
name : 'AzureBot'
messageType : 'embeds'
embeds : |
[ {
"title": "Build $(Build.BuildNumber) [$(Build.Repository.Name)]" ,
"url": "$(System.CollectionUri)$(System.TeamProject)/_build/results?buildId=$(Build.BuildId)" ,
"color": $(statusColor),
"fields": [
{
"name": "Author" ,
"value": "[$(Build.SourceVersionAuthor)](https://github.com/$(Build.SourceVersionAuthor))" ,
"inline": true
},
{
"name": "Commit" ,
"value": "[`$(commitString)`]($(commitUrl))" ,
"inline": true
},
{
"name": "Build Type" ,
"value": "$(buildTypeString)"
},
{
"name": "Test Results" ,
"value": "`$(testResultString)`"
},
{
"name": "Coverage" ,
"value": "`$(coverageString)`"
},
{
"name": "Status" ,
"value": "$(statusString)" ,
"inline": true
}
]
}]