diff --git a/azure-pipelines.yml b/azure-pipelines.yml
index 1f2a5c620..f981cb711 100644
--- a/azure-pipelines.yml
+++ b/azure-pipelines.yml
@@ -82,7 +82,18 @@ stages:
displayName: 'Install .net core'
inputs:
version: $(dotnetVersion)
- - bash: ./build.sh --backend
+ - bash: |
+ BUNDLEDVERSIONS=${AGENT_TOOLSDIRECTORY}/dotnet/sdk/${DOTNETVERSION}/Microsoft.NETCoreSdk.BundledVersions.props
+ echo $BUNDLEDVERSIONS
+ grep osx-x64 $BUNDLEDVERSIONS
+ if grep -q freebsd-x64 $BUNDLEDVERSIONS; then
+ echo "BSD already enabled"
+ else
+ echo "Enabling BSD support"
+ sed -i.ORI 's/osx-x64/osx-x64;freebsd-x64/' $BUNDLEDVERSIONS
+ fi
+ displayName: Enable FreeBSD Support
+ - bash: ./build.sh --backend --enable-bsd
displayName: Build Prowlarr Backend
- bash: |
find ${OUTPUTFOLDER} -type f ! -path "*/publish/*" -exec rm -rf {} \;
@@ -107,6 +118,10 @@ stages:
artifact: LinuxMuslCoreTests
displayName: Publish Linux Musl Test Package
condition: and(succeeded(), eq(variables['osName'], 'Windows'))
+ - publish: '$(testsFolder)/net5.0/freebsd-x64/publish'
+ artifact: FreebsdCoreTests
+ displayName: Publish FreeBSD Test Package
+ condition: and(succeeded(), eq(variables['osName'], 'Windows'))
- publish: '$(testsFolder)/net5.0/osx-x64/publish'
artifact: MacCoreTests
displayName: Publish MacOS Test Package
@@ -218,7 +233,7 @@ stages:
artifactName: WindowsFrontend
targetPath: _output
displayName: Fetch Frontend
- - bash: ./build.sh --packages
+ - bash: ./build.sh --packages --enable-bsd
displayName: Create Packages
- bash: |
find . -name "Prowlarr" -exec chmod a+x {} \;
@@ -293,6 +308,14 @@ stages:
tarCompression: 'gz'
includeRootFolder: false
rootFolderOrFile: $(artifactsFolder)/linux-musl-arm64/net5.0
+ - task: ArchiveFiles@2
+ displayName: Create FreeBSD Core Core tar
+ inputs:
+ archiveFile: '$(Build.ArtifactStagingDirectory)/Prowlarr.$(buildName).freebsd-core-x64.tar.gz'
+ archiveType: 'tar'
+ tarCompression: 'gz'
+ includeRootFolder: false
+ rootFolderOrFile: $(artifactsFolder)/freebsd-x64/net5.0
- publish: $(Build.ArtifactStagingDirectory)
artifact: 'Packages'
displayName: Publish Packages
@@ -346,24 +369,34 @@ stages:
displayName: Unit Native
dependsOn: Prepare
condition: and(succeeded(), eq(dependencies.Prepare.outputs['setVar.backendNotUpdated'], '0'))
+ workspace:
+ clean: all
strategy:
matrix:
MacCore:
osName: 'Mac'
testName: 'MacCore'
+ poolName: 'Azure Pipelines'
imageName: 'macos-10.14'
WindowsCore:
osName: 'Windows'
testName: 'WindowsCore'
+ poolName: 'Azure Pipelines'
imageName: 'windows-2019'
LinuxCore:
osName: 'Linux'
testName: 'LinuxCore'
+ poolName: 'Azure Pipelines'
imageName: 'ubuntu-18.04'
- pattern: 'Prowlarr.**.linux-core-x64.tar.gz'
+ FreebsdCore:
+ osName: 'Linux'
+ testName: 'FreebsdCore'
+ poolName: 'FreeBSD'
+ imageName:
pool:
+ name: $(poolName)
vmImage: $(imageName)
steps:
@@ -372,6 +405,7 @@ stages:
displayName: 'Install .net core'
inputs:
version: $(dotnetVersion)
+ condition: ne(variables['poolName'], 'FreeBSD')
- task: DownloadPipelineArtifact@2
displayName: Download Test Artifact
inputs:
@@ -472,17 +506,17 @@ stages:
osName: 'Mac'
testName: 'MacCore'
imageName: 'macos-10.14'
- pattern: 'Prowlarr.**.osx-core-x64.tar.gz'
+ pattern: 'Prowlarr.*.osx-core-x64.tar.gz'
WindowsCore:
osName: 'Windows'
testName: 'WindowsCore'
imageName: 'windows-2019'
- pattern: 'Prowlarr.**.windows-core-x64.zip'
+ pattern: 'Prowlarr.*.windows-core-x64.zip'
LinuxCore:
osName: 'Linux'
testName: 'LinuxCore'
imageName: 'ubuntu-18.04'
- pattern: 'Prowlarr.**.linux-core-x64.tar.gz'
+ pattern: 'Prowlarr.*.linux-core-x64.tar.gz'
pool:
vmImage: $(imageName)
@@ -527,6 +561,52 @@ stages:
failTaskOnFailedTests: true
displayName: Publish Test Results
+ - job: Integration_FreeBSD
+ displayName: Integration Native FreeBSD
+ dependsOn: Prepare
+ condition: and(succeeded(), eq(dependencies.Prepare.outputs['setVar.backendNotUpdated'], '0'))
+ workspace:
+ clean: all
+ variables:
+ pattern: 'Prowlarr.*.freebsd-core-x64.tar.gz'
+ pool:
+ name: 'FreeBSD'
+
+ steps:
+ - checkout: none
+ - task: DownloadPipelineArtifact@2
+ displayName: Download Test Artifact
+ inputs:
+ buildType: 'current'
+ artifactName: 'FreebsdCoreTests'
+ targetPath: $(testsFolder)
+ - task: DownloadPipelineArtifact@2
+ displayName: Download Build Artifact
+ inputs:
+ buildType: 'current'
+ artifactName: Packages
+ itemPattern: '/$(pattern)'
+ targetPath: $(Build.ArtifactStagingDirectory)
+ - bash: |
+ mkdir -p ${BUILD_ARTIFACTSTAGINGDIRECTORY}/bin
+ tar xf ${BUILD_ARTIFACTSTAGINGDIRECTORY}/$(pattern) -C ${BUILD_ARTIFACTSTAGINGDIRECTORY}/bin
+ displayName: Extract Package
+ - bash: |
+ mkdir -p ./bin/
+ cp -r -v ${BUILD_ARTIFACTSTAGINGDIRECTORY}/bin/Prowlarr/. ./bin/
+ displayName: Move Package Contents
+ - bash: |
+ chmod a+x ${TESTSFOLDER}/test.sh
+ ${TESTSFOLDER}/test.sh Linux Integration Test
+ displayName: Run Integration Tests
+ - task: PublishTestResults@2
+ inputs:
+ testResultsFormat: 'NUnit'
+ testResultsFiles: '**/TestResult.xml'
+ testRunTitle: 'FreeBSD Integration Tests'
+ failTaskOnFailedTests: true
+ displayName: Publish Test Results
+
- job: Integration_Docker
displayName: Integration Docker
dependsOn: Prepare
@@ -537,7 +617,8 @@ stages:
testName: 'Musl Net Core'
artifactName: LinuxMuslCoreTests
containerImage: ghcr.io/servarr/testimages:alpine
- pattern: 'Prowlarr.**.linux-musl-core-x64.tar.gz'
+ pattern: 'Prowlarr.*.linux-musl-core-x64.tar.gz'
+
pool:
vmImage: 'ubuntu-18.04'
@@ -596,17 +677,17 @@ stages:
Linux:
osName: 'Linux'
imageName: 'ubuntu-18.04'
- pattern: 'Prowlarr.**.linux-core-x64.tar.gz'
+ pattern: 'Prowlarr.*.linux-core-x64.tar.gz'
failBuild: false
Mac:
osName: 'Mac'
imageName: 'macos-10.14'
- pattern: 'Prowlarr.**.osx-core-x64.tar.gz'
+ pattern: 'Prowlarr.*.osx-core-x64.tar.gz'
failBuild: false
Windows:
osName: 'Windows'
imageName: 'windows-2019'
- pattern: 'Prowlarr.**.windows-core-x64.zip'
+ pattern: 'Prowlarr.*.windows-core-x64.zip'
failBuild: false
pool:
diff --git a/build.sh b/build.sh
index ae9a644f9..056f9e30c 100755
--- a/build.sh
+++ b/build.sh
@@ -1,4 +1,4 @@
-#! /bin/bash
+#! /usr/bin/env bash
set -e
outputFolder='_output'
@@ -25,6 +25,18 @@ UpdateVersionNumber()
fi
}
+EnableBsdSupport()
+{
+ #todo enable sdk with
+ #SDK_PATH=$(dotnet --list-sdks | grep -P '5\.\d\.\d+' | head -1 | sed 's/\(5\.[0-9]*\.[0-9]*\).*\[\(.*\)\]/\2\/\1/g')
+ # BUNDLED_VERSIONS="${SDK_PATH}/Microsoft.NETCoreSdk.BundledVersions.props"
+
+ if grep -qv freebsd-x64 src/Directory.Build.props; then
+ sed -i'' -e "s^\(.*\)^\1;freebsd-x64^g" src/Directory.Build.props
+ sed -i'' -e "s^\(.*\)^\1;freebsd-x64:net472^g" src/Directory.Build.props
+ fi
+}
+
LintUI()
{
ProgressStart 'ESLint'
@@ -207,7 +219,7 @@ Package()
IFS='-' read -ra SPLIT <<< "$runtime"
case "${SPLIT[0]}" in
- linux)
+ linux|freebsd*)
PackageLinux "$framework" "$runtime"
;;
win)
@@ -252,6 +264,7 @@ if [ $# -eq 0 ]; then
FRONTEND=YES
PACKAGES=YES
LINT=YES
+ ENABLE_BSD=NO
fi
while [[ $# -gt 0 ]]
@@ -263,6 +276,10 @@ case $key in
BACKEND=YES
shift # past argument
;;
+ --enable-bsd)
+ ENABLE_BSD=YES
+ shift # past argument
+ ;;
-r|--runtime)
RID="$2"
shift # past argument
@@ -303,6 +320,10 @@ set -- "${POSITIONAL[@]}" # restore positional parameters
if [ "$BACKEND" = "YES" ];
then
UpdateVersionNumber
+ if [ "$ENABLE_BSD" = "YES" ];
+ then
+ EnableBsdSupport
+ fi
Build
if [[ -z "$RID" || -z "$FRAMEWORK" ]];
then
@@ -311,6 +332,10 @@ then
PackageTests "net5.0" "linux-x64"
PackageTests "net5.0" "linux-musl-x64"
PackageTests "net5.0" "osx-x64"
+ if [ "$ENABLE_BSD" = "YES" ];
+ then
+ PackageTests "net5.0" "freebsd-x64"
+ fi
else
PackageTests "$FRAMEWORK" "$RID"
fi
@@ -346,6 +371,10 @@ then
Package "net5.0" "linux-musl-arm64"
Package "net5.0" "linux-arm"
Package "net5.0" "osx-x64"
+ if [ "$ENABLE_BSD" = "YES" ];
+ then
+ Package "net5.0" "freebsd-x64"
+ fi
else
Package "$FRAMEWORK" "$RID"
fi
diff --git a/src/NuGet.config b/src/NuGet.config
index 48bad0510..0900f71c8 100644
--- a/src/NuGet.config
+++ b/src/NuGet.config
@@ -1,8 +1,11 @@
+
-
+
+
+
diff --git a/src/NzbDrone.Core.Test/UpdateTests/UpdatePackageProviderFixture.cs b/src/NzbDrone.Core.Test/UpdateTests/UpdatePackageProviderFixture.cs
index 7f58693e6..441d79efe 100644
--- a/src/NzbDrone.Core.Test/UpdateTests/UpdatePackageProviderFixture.cs
+++ b/src/NzbDrone.Core.Test/UpdateTests/UpdatePackageProviderFixture.cs
@@ -26,7 +26,6 @@ namespace NzbDrone.Core.Test.UpdateTests
[Test]
[Ignore("TODO No Updates On Server")]
- [Platform(Exclude = "NetCore")]
public void finds_update_when_version_lower()
{
UseRealHttp();
diff --git a/src/NzbDrone.Mono.Test/DiskProviderTests/DiskProviderFixture.cs b/src/NzbDrone.Mono.Test/DiskProviderTests/DiskProviderFixture.cs
index 19f008757..5ca5e831e 100644
--- a/src/NzbDrone.Mono.Test/DiskProviderTests/DiskProviderFixture.cs
+++ b/src/NzbDrone.Mono.Test/DiskProviderTests/DiskProviderFixture.cs
@@ -8,6 +8,7 @@ using Mono.Unix.Native;
using Moq;
using NUnit.Framework;
using NzbDrone.Common.Disk;
+using NzbDrone.Common.EnvironmentInfo;
using NzbDrone.Common.Test.DiskTests;
using NzbDrone.Mono.Disk;
@@ -178,9 +179,13 @@ namespace NzbDrone.Mono.Test.DiskProviderTests
Syscall.stat(tempFile, out fileStat);
NativeConvert.ToOctalPermissionString(fileStat.st_mode).Should().Be("0644");
- Subject.SetPermissions(tempFile, "1664");
- Syscall.stat(tempFile, out fileStat);
- NativeConvert.ToOctalPermissionString(fileStat.st_mode).Should().Be("1664");
+ if (OsInfo.Os != Os.Bsd)
+ {
+ // This is not allowed on BSD
+ Subject.SetPermissions(tempFile, "1664");
+ Syscall.stat(tempFile, out fileStat);
+ NativeConvert.ToOctalPermissionString(fileStat.st_mode).Should().Be("1664");
+ }
}
[Test]
diff --git a/src/NzbDrone.Mono.Test/EnvironmentInfo/FreebsdVersionAdapterFixture.cs b/src/NzbDrone.Mono.Test/EnvironmentInfo/FreebsdVersionAdapterFixture.cs
new file mode 100644
index 000000000..1376316a6
--- /dev/null
+++ b/src/NzbDrone.Mono.Test/EnvironmentInfo/FreebsdVersionAdapterFixture.cs
@@ -0,0 +1,34 @@
+using FluentAssertions;
+using NUnit.Framework;
+using NzbDrone.Common.EnvironmentInfo;
+using NzbDrone.Common.Processes;
+using NzbDrone.Mono.EnvironmentInfo.VersionAdapters;
+using NzbDrone.Test.Common;
+
+namespace NzbDrone.Mono.Test.EnvironmentInfo
+{
+ [TestFixture]
+ [Platform("Linux")]
+ public class FreebsdVersionAdapterFixture : TestBase
+ {
+ [SetUp]
+ public void Setup()
+ {
+ if (OsInfo.Os != Os.Bsd)
+ {
+ throw new IgnoreException("BSD Only");
+ }
+
+ Mocker.SetConstant(Mocker.Resolve());
+ }
+
+ [Test]
+ public void should_get_version_info()
+ {
+ var info = Subject.Read();
+ info.FullName.Should().NotBeNullOrWhiteSpace();
+ info.Name.Should().NotBeNullOrWhiteSpace();
+ info.Version.Should().NotBeNullOrWhiteSpace();
+ }
+ }
+}
diff --git a/src/NzbDrone.Mono.Test/EnvironmentInfo/ReleaseFileVersionAdapterFixture.cs b/src/NzbDrone.Mono.Test/EnvironmentInfo/ReleaseFileVersionAdapterFixture.cs
index 5e36f93c9..e59b54ba4 100644
--- a/src/NzbDrone.Mono.Test/EnvironmentInfo/ReleaseFileVersionAdapterFixture.cs
+++ b/src/NzbDrone.Mono.Test/EnvironmentInfo/ReleaseFileVersionAdapterFixture.cs
@@ -14,6 +14,8 @@ namespace NzbDrone.Mono.Test.EnvironmentInfo
[SetUp]
public void Setup()
{
+ NotBsd();
+
Mocker.SetConstant(Mocker.Resolve());
}
diff --git a/src/NzbDrone.Mono.Test/EnvironmentInfo/VersionAdapters/ReleaseFileVersionAdapterFixture.cs b/src/NzbDrone.Mono.Test/EnvironmentInfo/VersionAdapters/ReleaseFileVersionAdapterFixture.cs
index 3a93a719b..0c3257657 100644
--- a/src/NzbDrone.Mono.Test/EnvironmentInfo/VersionAdapters/ReleaseFileVersionAdapterFixture.cs
+++ b/src/NzbDrone.Mono.Test/EnvironmentInfo/VersionAdapters/ReleaseFileVersionAdapterFixture.cs
@@ -19,6 +19,8 @@ namespace NzbDrone.Mono.Test.EnvironmentInfo.VersionAdapters
[Platform("Linux")]
public void should_get_version_info_from_actual_linux()
{
+ NotBsd();
+
Mocker.SetConstant(Mocker.Resolve());
var info = Subject.Read();
info.FullName.Should().NotBeNullOrWhiteSpace();
diff --git a/src/NzbDrone.Mono.Test/Prowlarr.Mono.Test.csproj b/src/NzbDrone.Mono.Test/Prowlarr.Mono.Test.csproj
index 20085f3f9..50d749852 100644
--- a/src/NzbDrone.Mono.Test/Prowlarr.Mono.Test.csproj
+++ b/src/NzbDrone.Mono.Test/Prowlarr.Mono.Test.csproj
@@ -8,7 +8,7 @@
-
+
diff --git a/src/NzbDrone.Mono/EnvironmentInfo/VersionAdapters/FreebsdVersionAdapter.cs b/src/NzbDrone.Mono/EnvironmentInfo/VersionAdapters/FreebsdVersionAdapter.cs
new file mode 100644
index 000000000..416bfd18c
--- /dev/null
+++ b/src/NzbDrone.Mono/EnvironmentInfo/VersionAdapters/FreebsdVersionAdapter.cs
@@ -0,0 +1,27 @@
+using System.Linq;
+using NzbDrone.Common.EnvironmentInfo;
+using NzbDrone.Common.Processes;
+
+namespace NzbDrone.Mono.EnvironmentInfo.VersionAdapters
+{
+ public class FreebsdVersionAdapter : IOsVersionAdapter
+ {
+ private readonly IProcessProvider _processProvider;
+
+ public FreebsdVersionAdapter(IProcessProvider processProvider)
+ {
+ _processProvider = processProvider;
+ }
+
+ public OsVersionModel Read()
+ {
+ var output = _processProvider.StartAndCapture("freebsd-version");
+
+ var version = output.Standard.First().Content;
+
+ return new OsVersionModel("FreeBSD", version, $"FreeBSD {version}");
+ }
+
+ public bool Enabled => OsInfo.Os == Os.Bsd;
+ }
+}
diff --git a/src/NzbDrone.Mono/Prowlarr.Mono.csproj b/src/NzbDrone.Mono/Prowlarr.Mono.csproj
index b08c5fe6e..bb883bc5c 100644
--- a/src/NzbDrone.Mono/Prowlarr.Mono.csproj
+++ b/src/NzbDrone.Mono/Prowlarr.Mono.csproj
@@ -3,7 +3,7 @@
net5.0
-
+
diff --git a/src/NzbDrone.Test.Common/TestBase.cs b/src/NzbDrone.Test.Common/TestBase.cs
index 6c49e294f..fa25c039f 100644
--- a/src/NzbDrone.Test.Common/TestBase.cs
+++ b/src/NzbDrone.Test.Common/TestBase.cs
@@ -174,6 +174,14 @@ namespace NzbDrone.Test.Common
}
}
+ protected void NotBsd()
+ {
+ if (OsInfo.Os == Os.Bsd)
+ {
+ throw new IgnoreException("Ignored on BSD");
+ }
+ }
+
protected void WithTempAsAppPath()
{
Mocker.GetMock()
diff --git a/src/Runtimes/linux-musl-arm64/libMonoPosixHelper.so b/src/Runtimes/linux-musl-arm64/libMonoPosixHelper.so
deleted file mode 100644
index ce9d41b94..000000000
Binary files a/src/Runtimes/linux-musl-arm64/libMonoPosixHelper.so and /dev/null differ
diff --git a/src/Runtimes/linux-musl-x64/libMonoPosixHelper.so b/src/Runtimes/linux-musl-x64/libMonoPosixHelper.so
deleted file mode 100644
index edcf49366..000000000
Binary files a/src/Runtimes/linux-musl-x64/libMonoPosixHelper.so and /dev/null differ