diff --git a/.github/workflows/build-app.yml b/.github/workflows/build-app.yml index 5003fc74b..a913918d7 100644 --- a/.github/workflows/build-app.yml +++ b/.github/workflows/build-app.yml @@ -1,4 +1,4 @@ -name: CI - Build App +name: CI - Build TUI on: push: @@ -8,7 +8,7 @@ on: jobs: build: - name: Build App + name: Build TUI runs-on: self-hosted steps: - uses: actions/checkout@v2 @@ -19,20 +19,19 @@ jobs: - run: pyinstaller OpenCore-Patcher.spec - run: ./after_pyinstaller.sh - run: 'codesign -s "Developer ID Application: Mykola Grymalyuk (S74BDJXQMD)" -v --deep --timestamp --entitlements entitlements.plist -o runtime "dist/OpenCore-Patcher.app"' - - - run: cd dist; zip ../OpenCore-Patcher.zip OpenCore-Patcher; zip -r ../OpenCore-Patcher.app.zip OpenCore-Patcher.app - - run: ./../sign-app.sh + - run: cd dist; zip -r ../OpenCore-Patcher-TUI.app.zip OpenCore-Patcher.app + - run: ./../sign-tui.sh - name: Upload App to Artifacts uses: actions/upload-artifact@v2 with: - name: OpenCore-Patcher.app - path: OpenCore-Patcher.app.zip + name: OpenCore-Patcher-TUI.app + path: OpenCore-Patcher-TUI.app.zip - name: Upload to Release if: github.event_name == 'release' uses: svenstaro/upload-release-action@e74ff71f7d8a4c4745b560a485cc5fdb9b5b999d with: repo_token: ${{ secrets.GITHUB_TOKEN }} - file: OpenCore-Patcher.app.zip + file: OpenCore-Patcher-TUI.app.zip tag: ${{ github.ref }} file_glob: true diff --git a/.github/workflows/build-gui.yml b/.github/workflows/build-gui.yml new file mode 100644 index 000000000..b14833304 --- /dev/null +++ b/.github/workflows/build-gui.yml @@ -0,0 +1,44 @@ +name: CI - Build GUI + +on: + push: + workflow_dispatch: + release: + types: [published] + +jobs: + build: + name: Build GUI + runs-on: self-hosted + steps: + - uses: actions/checkout@v2 + - name: Install Python Dependencies + run: pip3 install --upgrade pyinstaller requests + + - run: pyinstaller OCLP-CLI.spec + - run: cd dist; cp OCLP-CLI ../; cd .. + - name: Download latest nightly OCLP-GUI + run: curl -S -L https://nightly.link/dortania/OCLP-GUI/workflows/build-app/master/OpenCore-Patcher-GUI.app.zip --output ./OpenCore-Patcher-GUI.app.zip + - run: unzip -o OpenCore-Patcher-GUI.app.zip + - run: unzip OpenCore-Patcher-GUI.app.zip; rm OpenCore-Patcher-GUI.app.zip + - name: Merge new GUI + run: cp OCLP-CLI OpenCore\ Patcher.app/Contents/Resources/ + - run: python3 merge_gui.py + - run: 'codesign -s "Developer ID Application: Mykola Grymalyuk (S74BDJXQMD)" -v --force --deep --timestamp --entitlements entitlements.plist -o runtime "OpenCore Patcher.app/Contents/Resources/OCLP-CLI"' + - run: 'codesign -s "Developer ID Application: Mykola Grymalyuk (S74BDJXQMD)" -v --force --deep --timestamp --entitlements entitlements.plist -o runtime "OpenCore Patcher.app/Contents/Resources/oclpd"' + - run: 'codesign -s "Developer ID Application: Mykola Grymalyuk (S74BDJXQMD)" -v --force --deep --timestamp --entitlements entitlements.plist -o runtime "OpenCore Patcher.app"' + - run: ditto -c -k --sequesterRsrc --keepParent OpenCore\ Patcher.app OpenCore-Patcher-GUI.app.zip + - run: ./../sign-gui.sh + - name: Upload Binary to Artifacts + uses: actions/upload-artifact@v2 + with: + name: OpenCore-Patcher-GUI.app + path: OpenCore-Patcher-GUI.app.zip + - name: Upload to Release + if: github.event_name == 'release' + uses: svenstaro/upload-release-action@e74ff71f7d8a4c4745b560a485cc5fdb9b5b999d + with: + repo_token: ${{ secrets.GITHUB_TOKEN }} + file: OpenCore-Patcher-GUI.app.zip + tag: ${{ github.ref }} + file_glob: true diff --git a/OCLP-CLI.command b/OCLP-CLI.command index bfee6526a..c19297fad 100755 --- a/OCLP-CLI.command +++ b/OCLP-CLI.command @@ -52,6 +52,7 @@ class OpenCoreLegacyPatcher: # Building args requiring value values parser.add_argument("--model", action="store", help="Set custom model", required=False) + parser.add_argument("--disk", action="store", help="Specifies disk to patch", required=False) parser.add_argument("--smbios_spoof", action="store", help="Set SMBIOS patching mode", required=False) # SysPatch args @@ -70,6 +71,9 @@ class OpenCoreLegacyPatcher: else: print("- Using default payloads location") + if args.disk: + print(f"- Disk set: {args.disk}") + self.constants.disk = args.disk if args.verbose: print("- Set verbose configuration") self.constants.verbose_debug = True @@ -104,8 +108,6 @@ class OpenCoreLegacyPatcher: if args.moderate_smbios: print("- Set Moderate SMBIOS Patching configuration") self.constants.serial_settings = "Moderate" - if args.model: - host_is_target if args.smbios_spoof: if args.smbios_spoof == "Minimal": self.constants.serial_settings = "Minimal" diff --git a/Resources/Build.py b/Resources/Build.py index 65c3db3c5..734d20396 100644 --- a/Resources/Build.py +++ b/Resources/Build.py @@ -98,6 +98,29 @@ class BuildOpenCore: fw_mask = b"\xff\x3f\x08\xc0\x00\x00\x00\x00" return fw_feature, fw_mask + def disk_type(self): + drive_host_info = plistlib.loads(subprocess.run(f"diskutil info -plist {self.constants.disk}".split(), stdout=subprocess.PIPE).stdout.decode().strip().encode()) + sd_type = drive_host_info["MediaName"] + try: + ssd_type = drive_host_info["SolidState"] + except KeyError: + ssd_type = False + # Array filled with common SD Card names + # Note most USB-based SD Card readers generally report as "Storage Device", and no reliable way to detect further + if sd_type in ["SD Card Reader", "SD/MMC"]: + print("- Adding SD Card icon") + shutil.copy(self.constants.icon_path_sd, self.constants.opencore_release_folder) + elif ssd_type is True: + print("- Adding SSD icon") + shutil.copy(self.constants.icon_path_ssd, self.constants.opencore_release_folder) + elif drive_host_info["BusProtocol"] == "USB": + print("- Adding External USB Drive icon") + shutil.copy(self.constants.icon_path_external, self.constants.opencore_release_folder) + else: + print("- Adding Internal Drive icon") + shutil.copy(self.constants.icon_path_internal, self.constants.opencore_release_folder) + + def build_efi(self): Utilities.cls() if not self.constants.custom_model: @@ -639,6 +662,8 @@ class BuildOpenCore: if self.model == self.constants.override_smbios: print("- Adding -no_compat_check") self.config["NVRAM"]["Add"]["7C436110-AB2A-4BBB-A880-FE41995C9F82"]["boot-args"] += " -no_compat_check" + if self.constants.disk != "": + self.disk_type() def set_smbios(self): spoofed_model = self.model diff --git a/Resources/Constants.py b/Resources/Constants.py index 0446e8492..b70b2cc17 100644 --- a/Resources/Constants.py +++ b/Resources/Constants.py @@ -42,6 +42,7 @@ class Constants: self.debugenhancer_version = "1.0.3" self.innie_version = "1.3.0" self.fw_kext = "1.0.0" + self.disk = "" self.patcher_support_pkg_version = "0.0.11" # PatcherSupportPkg # Get resource path diff --git a/merge_gui.py b/merge_gui.py new file mode 100644 index 000000000..d26acc93e --- /dev/null +++ b/merge_gui.py @@ -0,0 +1,10 @@ +# Updates build version in OCLP-GUI during CI builds +# Copyright (C) 2021 Mykola Grymalyuk +import plistlib +from pathlib import Path +from Resources import Constants + +app_path = Path.cwd() / Path ("OpenCore Patcher.app/Contents/Info.plist") +info = plistlib.load(Path(app_path).open("rb")) +info["CFBundleShortVersionString"] = Constants.Constants().patcher_version +plistlib.dump(info, Path(app_path).open("wb"), sort_keys=True) \ No newline at end of file