core: Build macOS ARM64 binaries. Resolves #12372 (#12569)

This commit is contained in:
Diego Heras 2021-11-17 20:22:18 +01:00 committed by GitHub
parent 607c3f6b0b
commit 987c68260b
5 changed files with 37 additions and 66 deletions

View File

@ -717,7 +717,7 @@ On an Ubuntu 16 system: [chrisjohnson00.jackett](https://galaxy.ansible.com/chri
macOS 10.13 or greater macOS 10.13 or greater
### Install as service ### 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`. 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. 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`. Logs are stored as usual under `~/.config/Jackett/log.txt`.
### Run without installing as a service ### 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 ## Installation using Docker

View File

@ -50,6 +50,13 @@ stages:
runtime: osx-x64 runtime: osx-x64
archiveType: tar archiveType: tar
artifactName: Jackett.Binaries.macOS.tar.gz 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: LinuxAMDx64:
buildDescription: Linux AMD x64 buildDescription: Linux AMD x64
imageName: ubuntu-20.04 imageName: ubuntu-20.04

View File

@ -155,8 +155,9 @@ namespace Jackett.Common.Services
} }
private string GetUpdaterPath(string tempDirectory) => private string GetUpdaterPath(string tempDirectory) =>
variant == Variants.JackettVariant.CoreMacOs || variant == Variants.JackettVariant.CoreLinuxAmdx64 || variant == Variants.JackettVariant.CoreMacOs || variant == Variants.JackettVariant.CoreMacOsArm64 ||
variant == Variants.JackettVariant.CoreLinuxArm32 || variant == Variants.JackettVariant.CoreLinuxArm64 variant == Variants.JackettVariant.CoreLinuxAmdx64 || variant == Variants.JackettVariant.CoreLinuxArm32 ||
variant == Variants.JackettVariant.CoreLinuxArm64
? Path.Combine(tempDirectory, "Jackett", "JackettUpdater") ? Path.Combine(tempDirectory, "Jackett", "JackettUpdater")
: Path.Combine(tempDirectory, "Jackett", "JackettUpdater.exe"); : Path.Combine(tempDirectory, "Jackett", "JackettUpdater.exe");
@ -258,9 +259,9 @@ namespace Jackett.Common.Services
gzipStream.Close(); gzipStream.Close();
inStream.Close(); inStream.Close();
if (variant == Variants.JackettVariant.CoreMacOs || variant == Variants.JackettVariant.CoreLinuxAmdx64 if (variant == Variants.JackettVariant.CoreMacOs || variant == Variants.JackettVariant.CoreMacOsArm64
|| variant == Variants.JackettVariant.CoreLinuxArm32 || variant == Variants.JackettVariant.CoreLinuxArm64 || variant == Variants.JackettVariant.CoreLinuxAmdx64 || variant == Variants.JackettVariant.CoreLinuxArm32
|| variant == Variants.JackettVariant.Mono) || 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 //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 //https://github.com/xamarin/XamarinComponents/issues/282
@ -273,7 +274,7 @@ namespace Jackett.Common.Services
var jackettUpdaterPath = tempDir + "/Jackett/JackettUpdater"; var jackettUpdaterPath = tempDir + "/Jackett/JackettUpdater";
filePermissionService.MakeFileExecutable(jackettUpdaterPath); 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/install_service_macos");
filePermissionService.MakeFileExecutable(tempDir + "/Jackett/uninstall_jackett_macos"); filePermissionService.MakeFileExecutable(tempDir + "/Jackett/uninstall_jackett_macos");

View File

@ -12,6 +12,7 @@ namespace Jackett.Common.Utils
Mono, Mono,
CoreWindows, CoreWindows,
CoreMacOs, CoreMacOs,
CoreMacOsArm64,
CoreLinuxAmdx64, CoreLinuxAmdx64,
CoreLinuxArm32, CoreLinuxArm32,
CoreLinuxArm64 CoreLinuxArm64
@ -22,44 +23,25 @@ namespace Jackett.Common.Utils
if (DotNetCoreUtil.IsRunningOnDotNetCore) if (DotNetCoreUtil.IsRunningOnDotNetCore)
{ {
//Dot Net Core //Dot Net Core
if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
{
return JackettVariant.CoreWindows; return JackettVariant.CoreWindows;
} if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX) && RuntimeInformation.ProcessArchitecture == Architecture.X64)
if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX))
{
return JackettVariant.CoreMacOs; return JackettVariant.CoreMacOs;
} if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX) && RuntimeInformation.ProcessArchitecture == Architecture.Arm64)
return JackettVariant.CoreMacOsArm64;
if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux) && RuntimeInformation.ProcessArchitecture == Architecture.X64) if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux) && RuntimeInformation.ProcessArchitecture == Architecture.X64)
{
return JackettVariant.CoreLinuxAmdx64; return JackettVariant.CoreLinuxAmdx64;
}
if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux) && RuntimeInformation.ProcessArchitecture == Architecture.Arm) if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux) && RuntimeInformation.ProcessArchitecture == Architecture.Arm)
{
return JackettVariant.CoreLinuxArm32; return JackettVariant.CoreLinuxArm32;
}
if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux) && RuntimeInformation.ProcessArchitecture == Architecture.Arm64) if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux) && RuntimeInformation.ProcessArchitecture == Architecture.Arm64)
{
return JackettVariant.CoreLinuxArm64; return JackettVariant.CoreLinuxArm64;
}
} }
else else
{ {
//Full framework //Full framework
if (Environment.OSVersion.Platform == PlatformID.Win32NT) if (Environment.OSVersion.Platform == PlatformID.Win32NT)
{
return JackettVariant.FullFrameworkWindows; return JackettVariant.FullFrameworkWindows;
} return JackettVariant.Mono;
else
{
return JackettVariant.Mono;
}
} }
return JackettVariant.NotFound; return JackettVariant.NotFound;
@ -70,51 +52,31 @@ namespace Jackett.Common.Utils
switch (variant) switch (variant)
{ {
case JackettVariant.FullFrameworkWindows: case JackettVariant.FullFrameworkWindows:
{ return "Jackett.Binaries.Windows.zip";
return "Jackett.Binaries.Windows.zip";
}
case JackettVariant.Mono: case JackettVariant.Mono:
{ return "Jackett.Binaries.Mono.tar.gz";
return "Jackett.Binaries.Mono.tar.gz";
}
case JackettVariant.CoreWindows: case JackettVariant.CoreWindows:
{ return "Jackett.Binaries.Windows.zip";
return "Jackett.Binaries.Windows.zip";
}
case JackettVariant.CoreMacOs: 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: case JackettVariant.CoreLinuxAmdx64:
{ return "Jackett.Binaries.LinuxAMDx64.tar.gz";
return "Jackett.Binaries.LinuxAMDx64.tar.gz";
}
case JackettVariant.CoreLinuxArm32: case JackettVariant.CoreLinuxArm32:
{ return "Jackett.Binaries.LinuxARM32.tar.gz";
return "Jackett.Binaries.LinuxARM32.tar.gz";
}
case JackettVariant.CoreLinuxArm64: case JackettVariant.CoreLinuxArm64:
{ return "Jackett.Binaries.LinuxARM64.tar.gz";
return "Jackett.Binaries.LinuxARM64.tar.gz";
}
default: default:
{ return "";
return "";
}
} }
} }
public bool IsNonWindowsDotNetCoreVariant(JackettVariant variant) public bool IsNonWindowsDotNetCoreVariant(JackettVariant variant)
{ {
if (variant == JackettVariant.CoreMacOs || variant == JackettVariant.CoreLinuxAmdx64 return (variant == JackettVariant.CoreMacOs || variant == JackettVariant.CoreMacOsArm64
|| variant == JackettVariant.CoreLinuxArm32 || variant == JackettVariant.CoreLinuxArm64) || variant == JackettVariant.CoreLinuxAmdx64 || variant == JackettVariant.CoreLinuxArm32
{ || variant == JackettVariant.CoreLinuxArm64);
return true;
}
else
{
return false;
}
} }
} }
} }

View File

@ -603,8 +603,9 @@ namespace Jackett.Updater
startInfo.FileName = "mono"; startInfo.FileName = "mono";
} }
if (variant == Variants.JackettVariant.CoreMacOs || variant == Variants.JackettVariant.CoreLinuxAmdx64 if (variant == Variants.JackettVariant.CoreMacOs || variant == Variants.JackettVariant.CoreMacOsArm64
|| variant == Variants.JackettVariant.CoreLinuxArm32 || variant == Variants.JackettVariant.CoreLinuxArm64) || variant == Variants.JackettVariant.CoreLinuxAmdx64 || variant == Variants.JackettVariant.CoreLinuxArm32
|| variant == Variants.JackettVariant.CoreLinuxArm64)
{ {
startInfo.UseShellExecute = false; startInfo.UseShellExecute = false;
startInfo.CreateNoWindow = true; startInfo.CreateNoWindow = true;