2020-02-06 05:35:47 +00:00
name : $(majorVersion).$(minorVersion).$(patchVersion)
variables :
majorVersion : 0
2020-04-14 04:45:50 +00:00
minorVersion : 16
2020-04-14 04:36:07 +00:00
patchVersion : $[counter(variables['minorVersion'], 1)] #this will reset when we bump minor
2020-02-06 05:35:47 +00:00
jackettVersion : $(majorVersion).$(minorVersion).$(patchVersion)
buildConfiguration : Release
netCoreFramework : netcoreapp3.1
2020-02-08 09:49:36 +00:00
netCoreSdkVersion : 3.1 .x
2020-03-07 01:51:06 +00:00
system.debug : true
2020-02-06 05:35:47 +00:00
2020-03-14 04:57:57 +00:00
trigger :
2020-03-21 13:50:54 +00:00
branches :
include :
- '*'
pr :
branches :
include :
- '*'
2020-03-14 04:57:57 +00:00
2020-02-06 05:35:47 +00:00
stages :
- stage : BuildJackett
displayName : Create Binaries
jobs :
- job : Build
workspace :
clean : all
strategy :
matrix :
Mono :
buildDescription : Mono
imageName : ubuntu-latest
framework : net461
runtime : linux-x64
archiveType : tar
artifactName : Jackett.Binaries.Mono.tar.gz
Windows :
buildDescription : Windows
imageName : windows-latest
2020-02-08 09:49:36 +00:00
framework : $(netCoreFramework)
2020-02-06 05:35:47 +00:00
runtime : win-x86
archiveType : zip
artifactName : Jackett.Binaries.Windows.zip
macOS :
buildDescription : macOS
imageName : macOS-latest
framework : $(netCoreFramework)
runtime : osx-x64
archiveType : tar
artifactName : Jackett.Binaries.macOS.tar.gz
LinuxAmdx64 :
buildDescription : Linux AMD x64
imageName : ubuntu-latest
framework : $(netCoreFramework)
runtime : linux-x64
archiveType : tar
artifactName : Jackett.Binaries.LinuxAMDx64.tar.gz
LinuxARM32 :
buildDescription : Linux ARM32
imageName : ubuntu-latest
framework : $(netCoreFramework)
runtime : linux-arm
archiveType : tar
artifactName : Jackett.Binaries.LinuxARM32.tar.gz
LinuxARM64 :
buildDescription : Linux ARM64
imageName : ubuntu-latest
framework : $(netCoreFramework)
runtime : linux-arm64
archiveType : tar
artifactName : Jackett.Binaries.LinuxARM64.tar.gz
pool :
vmImage : $(imageName)
displayName : ${{ variables.buildDescription }}
steps :
- checkout : self
- task : UseDotNet@2
displayName : Install .NET Core SDK
inputs :
packageType : sdk
2020-02-08 09:49:36 +00:00
version : $(netCoreSdkVersion)
2020-02-06 05:35:47 +00:00
installationPath : $(Agent.ToolsDirectory)/dotnet
- task : DotNetCoreCLI@2
displayName : Build Jackett Server
inputs :
command : publish
projects : 'src/Jackett.Server/Jackett.Server.csproj'
publishWebProjects : false
zipAfterPublish : false
arguments : '--configuration $(buildConfiguration) --runtime $(runtime) --framework $(framework) --output $(Build.BinariesDirectory) /p:AssemblyVersion=$(jackettVersion) /p:FileVersion=$(jackettVersion) /p:InformationalVersion=$(jackettVersion) /p:Version=$(jackettVersion)'
- task : DotNetCoreCLI@2
displayName : Build Jackett Updater
inputs :
command : publish
projects : 'src/Jackett.Updater/Jackett.Updater.csproj'
publishWebProjects : false
zipAfterPublish : false
arguments : '--configuration $(buildConfiguration) --runtime $(runtime) --framework $(framework) --output $(Build.BinariesDirectory) /p:AssemblyVersion=$(jackettVersion) /p:FileVersion=$(jackettVersion) /p:InformationalVersion=$(jackettVersion) /p:Version=$(jackettVersion)'
- task : DotNetCoreCLI@2
displayName : Build Jackett Tray (Windows only)
condition : and(succeeded(), startsWith(variables['runtime'], 'win'))
inputs :
command : publish
projects : 'src/Jackett.Tray/Jackett.Tray.csproj'
publishWebProjects : false
zipAfterPublish : false
arguments : '--configuration $(buildConfiguration) --runtime $(runtime) --framework $(framework) --output $(Build.BinariesDirectory) /p:AssemblyVersion=$(jackettVersion) /p:FileVersion=$(jackettVersion) /p:InformationalVersion=$(jackettVersion) /p:Version=$(jackettVersion)'
- task : DotNetCoreCLI@2
displayName : Build Jackett Service (Windows only)
condition : and(succeeded(), startsWith(variables['runtime'], 'win'))
inputs :
command : publish
projects : 'src/Jackett.Service/Jackett.Service.csproj'
publishWebProjects : false
zipAfterPublish : false
arguments : '--configuration $(buildConfiguration) --runtime $(runtime) --framework $(framework) --output $(Build.BinariesDirectory) /p:AssemblyVersion=$(jackettVersion) /p:FileVersion=$(jackettVersion) /p:InformationalVersion=$(jackettVersion) /p:Version=$(jackettVersion)'
- task : CopyFiles@2
displayName : Copy Jackett Server
inputs :
SourceFolder : $(Build.BinariesDirectory)/Jackett.Server
contents : '**'
targetFolder : $(Build.BinariesDirectory)/Jackett
- task : CopyFiles@2
displayName : Copy Jackett Updater
inputs :
SourceFolder : $(Build.BinariesDirectory)/Jackett.Updater
contents : JackettUpdater*
targetFolder : $(Build.BinariesDirectory)/Jackett
- task : CopyFiles@2
displayName : Copy Jackett Tray (Windows only)
condition : and(succeeded(), startsWith(variables['runtime'], 'win'))
inputs :
SourceFolder : $(Build.BinariesDirectory)/Jackett.Tray
contents : |
System.Drawing.dll
System.Security.Cryptography.ProtectedData.dll
WindowsBase.dll
targetFolder : $(Build.BinariesDirectory)/Jackett
overWrite : true
- task : CopyFiles@2
displayName : Copy Jackett Tray Part 2 (Windows only)
condition : and(succeeded(), startsWith(variables['runtime'], 'win'))
inputs :
SourceFolder : $(Build.BinariesDirectory)/Jackett.Tray
contents : '*'
targetFolder : $(Build.BinariesDirectory)/Jackett
overWrite : false
- task : CopyFiles@2
displayName : Copy Jackett Service (Windows only)
condition : and(succeeded(), startsWith(variables['runtime'], 'win'))
inputs :
SourceFolder : $(Build.BinariesDirectory)/Jackett.Service
contents : JackettService*
targetFolder : $(Build.BinariesDirectory)/Jackett
- task : CopyFiles@2
displayName : Copy Mono Specific Scripts
condition : and(succeeded(), startsWith(variables['buildDescription'], 'Mono'))
inputs :
SourceFolder : $(Build.SourcesDirectory)
contents : |
install_service_systemd_mono.sh
Upstart.config
targetFolder : $(Build.BinariesDirectory)/Jackett
- task : CopyFiles@2
displayName : Copy macOS Specific Scripts
condition : and(succeeded(), startsWith(variables['buildDescription'], 'macOS'))
inputs :
SourceFolder : $(Build.SourcesDirectory)
contents : install_service_macos
targetFolder : $(Build.BinariesDirectory)/Jackett
- task : CopyFiles@2
displayName : Copy Linux Specific Scripts
condition : and(succeeded(), startsWith(variables['buildDescription'], 'Linux'))
inputs :
SourceFolder : $(Build.SourcesDirectory)
contents : |
install_service_systemd.sh
jackett_launcher.sh
targetFolder : $(Build.BinariesDirectory)/Jackett
#There is an issue with Mono 5.8 (fixed in Mono 5.12) where its expecting to use its own patched version of System.Net.Http.dll, instead of the version supplied in folder
#https://github.com/dotnet/corefx/issues/19914
#https://bugzilla.xamarin.com/show_bug.cgi?id=60315
#The workaround is to delete System.Net.Http.dll and patch the .exe.config file
#Mono on FreeBSD doesn't like the bundled System.Runtime.InteropServices.RuntimeInformation -> Delete it
#https://github.com/dotnet/corefx/issues/23989
#https://github.com/Jackett/Jackett/issues/3547
- task : PowerShell@2
displayName : Patch Mono Build (Mono only)
condition : and(succeeded(), startsWith(variables['buildDescription'], 'Mono'))
inputs :
workingDirectory : $(Build.BinariesDirectory)/Jackett
targetType : inline
script : |
$file = '$(Build.BinariesDirectory)/Jackett/JackettConsole.exe.config'
$xml = [xml] (Get-Content $file)
$newVersion = $xml.SelectSingleNode("configuration/runtime/*[name()='assemblyBinding']/*[name()='dependentAssembly']/*[name()='assemblyIdentity'][@name='System.Net.Http']/../*[name()='bindingRedirect']/@newVersion")
$newVersion.Value = '4.0.0.0'
$xml.Save($file)
Remove-Item '$(Build.BinariesDirectory)/Jackett/System.Net.Http.dll'
Remove-Item '$(Build.BinariesDirectory)/Jackett/System.Runtime.InteropServices.RuntimeInformation.dll'
- task : Bash@3
displayName : Set Folder and File Permissions (Mono, Linux and macOS)
condition : and(succeeded(), not(startsWith(variables['runtime'], 'win')))
inputs :
workingDirectory : $(Build.BinariesDirectory)/Jackett
targetType : inline
script : |
chmod 755 $(find "$(Build.BinariesDirectory)"/Jackett -type d)
chmod 644 $(find "$(Build.BinariesDirectory)"/Jackett -type f)
chmod 755 jackett
chmod 755 JackettUpdater
if [ -f install_service_systemd_mono.sh ]; then chmod 755 install_service_systemd_mono.sh; fi
if [ -f install_service_macos ]; then chmod 755 install_service_macos; fi
if [ -f install_service_systemd.sh ]; then chmod 755 install_service_systemd.sh; fi
if [ -f jackett_launcher.sh ]; then chmod 755 jackett_launcher.sh; fi
- task : ArchiveFiles@2
displayName : Compress Binaries
inputs :
rootFolderOrFile : $(Build.BinariesDirectory)/Jackett
includeRootFolder : true
archiveType : '$(archiveType)'
tarCompression : gz
archiveFile : '$(Build.ArtifactStagingDirectory)/$(artifactName)'
- task : CmdLine@2
displayName : Create Jackett Installer (Windows only)
condition : and(succeeded(), startsWith(variables['runtime'], 'win'))
inputs :
script : >
iscc.exe $(Build.SourcesDirectory)/Installer.iss
/O"$(Build.ArtifactStagingDirectory)"
/DMyFileForVersion=$(Build.BinariesDirectory)/Jackett/Jackett.Common.dll
/DMySourceFolder=$(Build.BinariesDirectory)/Jackett
/DMyOutputFilename=Jackett.Installer.Windows
- task : PublishBuildArtifacts@1
inputs :
pathtoPublish : '$(Build.ArtifactStagingDirectory)'
2020-04-07 16:17:17 +00:00
- stage : CodeStyle
displayName : Code Style Compliance
dependsOn : [ ]
jobs :
- job : Linting
pool :
vmImage : ubuntu-latest
workspace :
clean : all
steps :
- checkout : self
- task : UseDotNet@2
displayName : Install .NET Core SDK
inputs :
packageType : sdk
version : $(netCoreSdkVersion)
installationPath : $(Agent.ToolsDirectory)/dotnet
- task : DotNetCoreCLI@2
displayName : Install Dotnet Format
inputs :
command : custom
custom : tool
arguments : update -g dotnet-format
- task : Bash@3
displayName : Lint Dotnet
inputs :
workingDirectory : $(Build.SourcesDirectory)
targetType : inline
failOnStderr : true
script : |
dotnet-format --dry-run --check --verbosity diagnostic --folder ./src/DateTimeRoutines
dotnet-format --dry-run --check --verbosity diagnostic --folder ./src/Jackett.Common
dotnet-format --dry-run --check --verbosity diagnostic --folder ./src/Jackett.IntegrationTests
dotnet-format --dry-run --check --verbosity diagnostic --folder ./src/Jackett.Server
dotnet-format --dry-run --check --verbosity diagnostic --folder ./src/Jackett.Service
dotnet-format --dry-run --check --verbosity diagnostic --folder ./src/Jackett.Test
dotnet-format --dry-run --check --verbosity diagnostic --folder ./src/Jackett.Tray
dotnet-format --dry-run --check --verbosity diagnostic --folder ./src/Jackett.Updater
2020-03-21 13:50:54 +00:00
- stage : UnitTestJackett
displayName : Unit Tests
2020-04-07 16:17:17 +00:00
dependsOn : CodeStyle
2020-03-21 13:50:54 +00:00
jobs :
- job : UnitTest
workspace :
clean : all
strategy :
matrix :
Mono :
buildDescription : Mono
imageName : ubuntu-latest
framework : net461
runtime : linux-x64
Windows :
buildDescription : Windows
imageName : windows-latest
framework : $(netCoreFramework)
runtime : win-x86
macOS :
buildDescription : macOS
imageName : macOS-latest
framework : $(netCoreFramework)
runtime : osx-x64
LinuxAmdx64 :
buildDescription : Linux AMD x64
imageName : ubuntu-latest
framework : $(netCoreFramework)
runtime : linux-x64
LinuxARM32 :
buildDescription : Linux ARM32
imageName : ubuntu-latest
framework : $(netCoreFramework)
runtime : linux-arm
LinuxARM64 :
buildDescription : Linux ARM64
imageName : ubuntu-latest
framework : $(netCoreFramework)
runtime : linux-arm64
pool :
vmImage : $(imageName)
displayName : ${{ variables.buildDescription }}
steps :
- checkout : self
- task : UseDotNet@2
displayName : Install .NET Core SDK
inputs :
packageType : sdk
version : $(netCoreSdkVersion)
installationPath : $(Agent.ToolsDirectory)/dotnet
- task : DotNetCoreCLI@2
displayName : Build Test Project
inputs :
command : build
projects : '**/*.Test*/*.csproj'
arguments : '--configuration $(buildConfiguration) --runtime $(runtime) --framework $(framework)'
2020-02-06 05:35:47 +00:00
- task : DotNetCoreCLI@2
2020-03-22 05:40:58 +00:00
displayName : Unit Tests (Mono, Linux and macOS)
condition : and(succeeded(), not(startsWith(variables['runtime'], 'win')))
2020-02-06 05:35:47 +00:00
inputs :
command : test
projects : '**/*.Test*/*.csproj'
2020-03-22 05:40:58 +00:00
arguments : '--configuration $(buildConfiguration) --framework $(framework) --runtime $(runtime)'
2020-03-21 13:50:54 +00:00
testRunTitle : 'Unit - $(buildDescription) - $(Build.BuildId)'
2020-02-06 05:35:47 +00:00
- task : DotNetCoreCLI@2
2020-03-22 05:40:58 +00:00
displayName : Unit Tests & Code Coverage (Windows only)
condition : and(succeeded(), startsWith(variables['runtime'], 'win'))
2020-02-06 05:35:47 +00:00
inputs :
command : test
projects : '**/*.Test*/*.csproj'
2020-03-22 05:40:58 +00:00
arguments : '--configuration $(buildConfiguration) --framework $(framework) /p:CollectCoverage=true /p:CoverletOutputFormat=cobertura'
2020-03-21 13:50:54 +00:00
testRunTitle : 'Unit - $(buildDescription) - $(Build.BuildId)'
2020-02-06 05:35:47 +00:00
2020-03-22 05:40:58 +00:00
- task : DotNetCoreCLI@2
displayName : Install Coverage ReportGenerator Tool (Windows only)
condition : and(succeeded(), startsWith(variables['runtime'], 'win'))
inputs :
command : custom
custom : tool
arguments : install --tool-path . dotnet-reportgenerator-globaltool
- task : PowerShell@2
displayName : Generate Coverage Report (Windows only)
condition : and(succeeded(), startsWith(variables['runtime'], 'win'))
inputs :
targetType : inline
script : ./reportgenerator -reports:$(Build.SourcesDirectory)/src/*.Test*/coverage.*.cobertura.xml -targetdir:$(Build.SourcesDirectory)/coverlet/reports -reporttypes:"Cobertura"
- task : PublishCodeCoverageResults@1
displayName : Publish Code Coverage (Windows only)
condition : and(succeeded(), startsWith(variables['runtime'], 'win'))
inputs :
codeCoverageTool : Cobertura
summaryFileLocation : $(Build.SourcesDirectory)/coverlet/reports/Cobertura.xml
2020-02-06 05:35:47 +00:00
- stage : Integration
displayName : Integration Tests
dependsOn : BuildJackett
jobs :
- job : Selenium
workspace :
clean : all
strategy :
matrix :
Mono :
buildDescription : Mono
imageName : ubuntu-latest
artifactName : Jackett.Binaries.Mono.tar.gz
Windows :
buildDescription : Windows
imageName : windows-latest
artifactName : Jackett.Binaries.Windows.zip
2020-03-22 05:42:34 +00:00
macOS :
buildDescription : macOS
imageName : macOS-latest
artifactName : Jackett.Binaries.macOS.tar.gz
2020-02-06 05:35:47 +00:00
LinuxAmdx64 :
buildDescription : Linux AMD x64
imageName : ubuntu-latest
artifactName : Jackett.Binaries.LinuxAMDx64.tar.gz
pool :
vmImage : $(imageName)
displayName : ${{ variables.buildDescription }}
steps :
- checkout : self
- task : DownloadPipelineArtifact@2
displayName : Download artifacts for integration tests
inputs :
patterns : '**/Jackett*'
path : $(Build.ArtifactStagingDirectory)
- task : PowerShell@2
displayName : Install Jackett (Windows only)
condition : and(succeeded(), eq(variables['buildDescription'], 'Windows'))
inputs :
workingDirectory : $(Build.ArtifactStagingDirectory)/drop
targetType : inline
script : |
Start-Process ./Jackett.Installer.Windows.exe /silent -NoNewWindow -Wait
- task : Bash@3
displayName : Install Jackett (Mono, Linux and macOS)
condition : and(succeeded(), ne(variables['buildDescription'], 'Windows'))
inputs :
workingDirectory : $(Build.ArtifactStagingDirectory)/drop
targetType : inline
script : |
tar xzf "$(artifactName)"
cd Jackett
if [[ "$(artifactName)" == *"Mono"* ]]; then mono --version; fi
if [[ "$(artifactName)" == *"Mono"* ]]; then sudo ./install_service_systemd_mono.sh; fi
2020-03-22 05:42:34 +00:00
if [[ "$(artifactName)" == *"macOS"* ]]; then ./install_service_macos; fi
2020-02-06 05:35:47 +00:00
if [[ "$(artifactName)" == *"LinuxAMDx64"* ]]; then sudo ./install_service_systemd.sh; fi
- task : UseDotNet@2
displayName : Install .NET Core SDK
inputs :
packageType : sdk
2020-02-08 09:49:36 +00:00
version : $(netCoreSdkVersion)
2020-02-06 05:35:47 +00:00
installationPath : $(Agent.ToolsDirectory)/dotnet
- task : DotNetCoreCLI@2
displayName : Run Integration Tests
inputs :
command : test
projects : '**/*IntegrationTest*/*.csproj'
2020-03-21 13:50:54 +00:00
testRunTitle : 'Integration - $(buildDescription) - $(Build.BuildId)'
2020-02-06 05:35:47 +00:00
- stage : PublishGithub
displayName : Publish to Github
2020-03-21 13:50:54 +00:00
dependsOn :
- UnitTestJackett
- Integration
2020-02-06 05:35:47 +00:00
condition : and(succeeded(), ne(variables['Build.Reason'], 'PullRequest'), eq(variables['Build.SourceBranch'], 'refs/heads/master'))
jobs :
- job : Publish
workspace :
clean : all
steps :
- checkout : self
- task : DownloadPipelineArtifact@2
2020-02-06 09:32:56 +00:00
displayName : Download Artifacts for Publish
2020-02-06 05:35:47 +00:00
inputs :
patterns : '**/Jackett*'
path : $(Build.ArtifactStagingDirectory)
2020-03-14 04:05:49 +00:00
- task : GitHubRelease@1
2020-02-06 05:35:47 +00:00
displayName : Create Github release
inputs :
2020-04-12 07:12:19 +00:00
gitHubConnection : JackettPublish
2020-02-06 05:35:47 +00:00
repositoryName : '$(Build.Repository.Name)'
action : create
target : $(Build.SourceVersion)
2020-03-14 04:21:54 +00:00
tagSource : userSpecifiedTag
2020-02-06 05:35:47 +00:00
tag : v$(Build.BuildNumber)
title : v$(Build.BuildNumber)
2020-02-06 09:58:40 +00:00
assets : $(Build.ArtifactStagingDirectory)/drop/*
2020-03-14 04:05:49 +00:00
assetUploadMode : replace
2020-02-06 05:35:47 +00:00
isDraft : true
addChangeLog : true
2020-02-06 09:32:56 +00:00
compareWith : lastNonDraftRelease
2020-02-29 10:36:09 +00:00
- task : PowerShell@2
displayName : Ensure all artifacts are uploaded to Github
inputs :
targetType : inline
script : |
2020-04-13 23:18:59 +00:00
$json = Invoke-WebRequest 'https://dev.azure.com/Jackett/Jackett/_apis/build/builds/$(Build.BuildId)/logs?api-version=5.0' | ConvertFrom-Json
2020-02-29 10:36:09 +00:00
$lastTwoLogUrls = $json.value[-1..-2].url
foreach($logUrl in $lastTwoLogUrls)
{
2020-03-07 01:51:06 +00:00
Write-Output $logUrl
2020-02-29 10:36:09 +00:00
$logText = Invoke-WebRequest $logUrl
2020-03-14 05:57:34 +00:00
if ($logText -like '*Creating a release for tag:*')
2020-02-29 10:36:09 +00:00
{
2020-03-14 06:20:38 +00:00
$logInspect = ($logText -split "Creating a release for tag:")[-1]
2020-03-14 05:57:34 +00:00
$successCount = (Select-String "Uploaded file successfully:" -InputObject $logInspect -AllMatches).Matches.Count
$failureCount = (Select-String "Duplicate asset found:" -InputObject $logInspect -AllMatches).Matches.Count
2020-03-14 05:18:44 +00:00
Write-Output "Success count is: $successCount and failure count is: $failureCount"
2020-02-29 10:36:09 +00:00
if (($successCount -ne 7) -or ($failureCount -ne 0)) { Write-Host "##vso[task.complete result=Failed;]DONE" }
}
}