From 987c68260b19e35814d8c3ad5e7686ac192441c4 Mon Sep 17 00:00:00 2001 From: Diego Heras Date: Wed, 17 Nov 2021 20:22:18 +0100 Subject: [PATCH] core: Build macOS ARM64 binaries. Resolves #12372 (#12569) --- README.md | 4 +- azure-pipelines.yml | 7 ++ src/Jackett.Common/Services/UpdateService.cs | 13 ++-- src/Jackett.Common/Utils/Variants.cs | 74 +++++--------------- src/Jackett.Updater/Program.cs | 5 +- 5 files changed, 37 insertions(+), 66 deletions(-) diff --git a/README.md b/README.md index dea2997cb..7511c146e 100644 --- a/README.md +++ b/README.md @@ -717,7 +717,7 @@ On an Ubuntu 16 system: [chrisjohnson00.jackett](https://galaxy.ansible.com/chri macOS 10.13 or greater ### Install as service -1. Download and extract the latest `Jackett.Binaries.macOS.tar.gz` release from the [releases page](https://github.com/Jackett/Jackett/releases). +1. Download and extract the latest `Jackett.Binaries.macOS.tar.gz` or `Jackett.Binaries.macOSARM64.tar.gz` release from the [releases page](https://github.com/Jackett/Jackett/releases). 2. Open the extracted folder and double-click on `install_service_macos`. 3. If the installation was a success, you can close the Terminal window. @@ -725,7 +725,7 @@ The service will start on each logon. You can always stop it by running `launchc Logs are stored as usual under `~/.config/Jackett/log.txt`. ### Run without installing as a service -Download and extract the latest `Jackett.Binaries.macOS.tar.gz` release from the [releases page](https://github.com/Jackett/Jackett/releases) and run Jackett with the command `./jackett`. +Download and extract the latest `Jackett.Binaries.macOS.tar.gz` or `Jackett.Binaries.macOSARM64.tar.gz` release from the [releases page](https://github.com/Jackett/Jackett/releases) and run Jackett with the command `./jackett`. ## Installation using Docker diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 4fcc932dc..bd40cfcc2 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -50,6 +50,13 @@ stages: runtime: osx-x64 archiveType: tar artifactName: Jackett.Binaries.macOS.tar.gz + macOSARM64: + buildDescription: macOS ARM64 + imageName: macOS-10.15 + framework: $(netCoreFramework) + runtime: osx-arm64 + archiveType: tar + artifactName: Jackett.Binaries.macOSARM64.tar.gz LinuxAMDx64: buildDescription: Linux AMD x64 imageName: ubuntu-20.04 diff --git a/src/Jackett.Common/Services/UpdateService.cs b/src/Jackett.Common/Services/UpdateService.cs index 1f972938b..3eb02831d 100644 --- a/src/Jackett.Common/Services/UpdateService.cs +++ b/src/Jackett.Common/Services/UpdateService.cs @@ -155,8 +155,9 @@ namespace Jackett.Common.Services } private string GetUpdaterPath(string tempDirectory) => - variant == Variants.JackettVariant.CoreMacOs || variant == Variants.JackettVariant.CoreLinuxAmdx64 || - variant == Variants.JackettVariant.CoreLinuxArm32 || variant == Variants.JackettVariant.CoreLinuxArm64 + variant == Variants.JackettVariant.CoreMacOs || variant == Variants.JackettVariant.CoreMacOsArm64 || + variant == Variants.JackettVariant.CoreLinuxAmdx64 || variant == Variants.JackettVariant.CoreLinuxArm32 || + variant == Variants.JackettVariant.CoreLinuxArm64 ? Path.Combine(tempDirectory, "Jackett", "JackettUpdater") : Path.Combine(tempDirectory, "Jackett", "JackettUpdater.exe"); @@ -258,9 +259,9 @@ namespace Jackett.Common.Services gzipStream.Close(); inStream.Close(); - if (variant == Variants.JackettVariant.CoreMacOs || variant == Variants.JackettVariant.CoreLinuxAmdx64 - || variant == Variants.JackettVariant.CoreLinuxArm32 || variant == Variants.JackettVariant.CoreLinuxArm64 - || variant == Variants.JackettVariant.Mono) + if (variant == Variants.JackettVariant.CoreMacOs || variant == Variants.JackettVariant.CoreMacOsArm64 + || variant == Variants.JackettVariant.CoreLinuxAmdx64 || variant == Variants.JackettVariant.CoreLinuxArm32 + || variant == Variants.JackettVariant.CoreLinuxArm64 || variant == Variants.JackettVariant.Mono) { //Calling the file permission service to limit usage to netcoreapp. The Mono.Posix.NETStandard library causes issues outside of .NET Core //https://github.com/xamarin/XamarinComponents/issues/282 @@ -273,7 +274,7 @@ namespace Jackett.Common.Services var jackettUpdaterPath = tempDir + "/Jackett/JackettUpdater"; filePermissionService.MakeFileExecutable(jackettUpdaterPath); - if (variant == Variants.JackettVariant.CoreMacOs) + if (variant == Variants.JackettVariant.CoreMacOs || variant == Variants.JackettVariant.CoreMacOsArm64) { filePermissionService.MakeFileExecutable(tempDir + "/Jackett/install_service_macos"); filePermissionService.MakeFileExecutable(tempDir + "/Jackett/uninstall_jackett_macos"); diff --git a/src/Jackett.Common/Utils/Variants.cs b/src/Jackett.Common/Utils/Variants.cs index 83c7f1ff2..a9bc5020f 100644 --- a/src/Jackett.Common/Utils/Variants.cs +++ b/src/Jackett.Common/Utils/Variants.cs @@ -12,6 +12,7 @@ namespace Jackett.Common.Utils Mono, CoreWindows, CoreMacOs, + CoreMacOsArm64, CoreLinuxAmdx64, CoreLinuxArm32, CoreLinuxArm64 @@ -22,44 +23,25 @@ namespace Jackett.Common.Utils if (DotNetCoreUtil.IsRunningOnDotNetCore) { //Dot Net Core - if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) - { return JackettVariant.CoreWindows; - } - - if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX)) - { + if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX) && RuntimeInformation.ProcessArchitecture == Architecture.X64) return JackettVariant.CoreMacOs; - } - + if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX) && RuntimeInformation.ProcessArchitecture == Architecture.Arm64) + return JackettVariant.CoreMacOsArm64; if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux) && RuntimeInformation.ProcessArchitecture == Architecture.X64) - { return JackettVariant.CoreLinuxAmdx64; - } - if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux) && RuntimeInformation.ProcessArchitecture == Architecture.Arm) - { return JackettVariant.CoreLinuxArm32; - } - if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux) && RuntimeInformation.ProcessArchitecture == Architecture.Arm64) - { return JackettVariant.CoreLinuxArm64; - } } else { //Full framework - if (Environment.OSVersion.Platform == PlatformID.Win32NT) - { return JackettVariant.FullFrameworkWindows; - } - else - { - return JackettVariant.Mono; - } + return JackettVariant.Mono; } return JackettVariant.NotFound; @@ -70,51 +52,31 @@ namespace Jackett.Common.Utils switch (variant) { case JackettVariant.FullFrameworkWindows: - { - return "Jackett.Binaries.Windows.zip"; - } + return "Jackett.Binaries.Windows.zip"; case JackettVariant.Mono: - { - return "Jackett.Binaries.Mono.tar.gz"; - } + return "Jackett.Binaries.Mono.tar.gz"; case JackettVariant.CoreWindows: - { - return "Jackett.Binaries.Windows.zip"; - } + return "Jackett.Binaries.Windows.zip"; case JackettVariant.CoreMacOs: - { - return "Jackett.Binaries.macOS.tar.gz"; - } + return "Jackett.Binaries.macOS.tar.gz"; + case JackettVariant.CoreMacOsArm64: + return "Jackett.Binaries.macOSARM64.tar.gz"; case JackettVariant.CoreLinuxAmdx64: - { - return "Jackett.Binaries.LinuxAMDx64.tar.gz"; - } + return "Jackett.Binaries.LinuxAMDx64.tar.gz"; case JackettVariant.CoreLinuxArm32: - { - return "Jackett.Binaries.LinuxARM32.tar.gz"; - } + return "Jackett.Binaries.LinuxARM32.tar.gz"; case JackettVariant.CoreLinuxArm64: - { - return "Jackett.Binaries.LinuxARM64.tar.gz"; - } + return "Jackett.Binaries.LinuxARM64.tar.gz"; default: - { - return ""; - } + return ""; } } public bool IsNonWindowsDotNetCoreVariant(JackettVariant variant) { - if (variant == JackettVariant.CoreMacOs || variant == JackettVariant.CoreLinuxAmdx64 - || variant == JackettVariant.CoreLinuxArm32 || variant == JackettVariant.CoreLinuxArm64) - { - return true; - } - else - { - return false; - } + return (variant == JackettVariant.CoreMacOs || variant == JackettVariant.CoreMacOsArm64 + || variant == JackettVariant.CoreLinuxAmdx64 || variant == JackettVariant.CoreLinuxArm32 + || variant == JackettVariant.CoreLinuxArm64); } } } diff --git a/src/Jackett.Updater/Program.cs b/src/Jackett.Updater/Program.cs index 2bd666573..cf8942973 100644 --- a/src/Jackett.Updater/Program.cs +++ b/src/Jackett.Updater/Program.cs @@ -603,8 +603,9 @@ namespace Jackett.Updater startInfo.FileName = "mono"; } - if (variant == Variants.JackettVariant.CoreMacOs || variant == Variants.JackettVariant.CoreLinuxAmdx64 - || variant == Variants.JackettVariant.CoreLinuxArm32 || variant == Variants.JackettVariant.CoreLinuxArm64) + if (variant == Variants.JackettVariant.CoreMacOs || variant == Variants.JackettVariant.CoreMacOsArm64 + || variant == Variants.JackettVariant.CoreLinuxAmdx64 || variant == Variants.JackettVariant.CoreLinuxArm32 + || variant == Variants.JackettVariant.CoreLinuxArm64) { startInfo.UseShellExecute = false; startInfo.CreateNoWindow = true;