diff --git a/build_differ.py b/build_differ.py index e90466e..3c37c17 100644 --- a/build_differ.py +++ b/build_differ.py @@ -52,6 +52,10 @@ def main(): print("Building for Windows...") run_command('dotnet publish ./csproj -c Release -r win-x64 --self-contained') + # Build for macOS + print("Building for macOS...") + run_command('dotnet publish ./csproj -c Release -r osx-x64 --self-contained') + # Compress the Linux build linux_build_dir = './csproj/bin/Release/net8.0/linux-x64' compress_files(linux_build_dir, f"./dist/linux-x64-{version}.tar.gz") @@ -60,6 +64,10 @@ def main(): windows_build_dir = './csproj/bin/Release/net8.0/win-x64' compress_files(windows_build_dir, f"./dist/win-x64-{version}.zip") + # Compress the macOS build + macos_build_dir = './csproj/bin/Release/net8.0/osx-x64' + compress_files(macos_build_dir, f"./dist/osx-x64-{version}.tar.gz") + print("Build and compression complete.") diff --git a/dist/linux-x64-0.0.1.tar.gz b/dist/linux-x64-0.0.1.tar.gz index 0be05b6..46ef67b 100644 Binary files a/dist/linux-x64-0.0.1.tar.gz and b/dist/linux-x64-0.0.1.tar.gz differ diff --git a/dist/osx-x64-0.0.1.tar.gz b/dist/osx-x64-0.0.1.tar.gz new file mode 100644 index 0000000..1c88f3b Binary files /dev/null and b/dist/osx-x64-0.0.1.tar.gz differ diff --git a/dist/win-x64-0.0.1.zip b/dist/win-x64-0.0.1.zip index d58439c..78e15c9 100644 Binary files a/dist/win-x64-0.0.1.zip and b/dist/win-x64-0.0.1.zip differ diff --git a/src/python_redlines/engines.py b/src/python_redlines/engines.py index 34dd4dc..0775630 100644 --- a/src/python_redlines/engines.py +++ b/src/python_redlines/engines.py @@ -3,6 +3,7 @@ import os import platform import zipfile +import tarfile from pathlib import Path from typing import Union, Tuple, Optional @@ -28,24 +29,31 @@ def _unzip_binary(self): arch = 'x64' # Assuming x64 architecture if os_name == 'linux': - zip_name = f"linux-{arch}-{__version__}.zip" - binary_name = 'linux-64/redlines' + zip_name = f"linux-{arch}-{__version__}.tar.gz" + binary_name = 'linux-x64/redlines' + zip_path = os.path.join(binaries_path, zip_name) + if not os.path.exists(zip_path): + with tarfile.open(zip_path, 'r:gz') as tar_ref: + tar_ref.extractall(target_path) elif os_name == 'windows': zip_name = f"win-{arch}-{__version__}.zip" binary_name = 'win-x64/redlines.exe' + zip_path = os.path.join(binaries_path, zip_name) + if not os.path.exists(zip_path): + with zipfile.ZipFile(zip_path, 'r') as zip_ref: + zip_ref.extractall(target_path) - else: - raise EnvironmentError("Unsupported OS") - - full_binary_path = os.path.join(target_path, binary_name) - - if not os.path.exists(full_binary_path): - + elif os_name == 'darwin': + zip_name = f"osx-{arch}-{__version__}.tar.gz" + binary_name = 'osx-x64/redlines' zip_path = os.path.join(binaries_path, zip_name) + if not os.path.exists(zip_path): + with tarfile.open(zip_path, 'r:gz') as tar_ref: + tar_ref.extractall(target_path) - with zipfile.ZipFile(zip_path, 'r') as zip_ref: - zip_ref.extractall(target_path) + else: + raise EnvironmentError("Unsupported OS") return os.path.join(target_path, binary_name)