1
0
mirror of https://gitlab.com/kelteseth/ScreenPlay.git synced 2024-11-05 18:42:29 +01:00

Move BuildConfig and BuildResult into dedicated files

this fixed the circular dependency in the build_and_publish
script than internally imports the macos_sign
This commit is contained in:
Elias Steurer 2023-08-24 16:17:48 +02:00
parent fdbf077f0e
commit 325c47f87b
5 changed files with 85 additions and 75 deletions

View File

@ -8,6 +8,8 @@ import argparse
import time
import zipfile
import defines
from build_result import BuildResult
from build_config import BuildConfig
from typing import Tuple
from pathlib import Path
import macos_sign
@ -25,55 +27,6 @@ def clean_build_dir(build_dir):
build_dir.mkdir(parents=True, exist_ok=True)
class BuildResult:
# Windows example with absolute paths:
# [...]/build-x64-windows-release/
build: Path
# [...]/build-x64-windows-release/bin
bin: Path
# [...]/build-x64-windows-release/ScreenPlay-Installer.exe
installer: Path
# [...]/build-x64-windows-release/ScreenPlay-Installer.zip
installer_zip: Path
# [...]/build-x64-windows-release/ScreenPlay-0.X.0-RCX-x64-windows-release.zip
build_zip: Path
# [...]/build-x64-windows-release/ScreenPlay-0.X.0-RCX-x64-windows-release.txt :sha256, needed for scoop
build_hash: Path
# x64, arm64, universal
build_arch: str
class BuildConfig:
root_path: str
cmake_osx_architectures: str
cmake_target_triplet: str
package: bool
osx_bundle: str
package_command: str
executable_file_ending: str
# qt_* use either aqt or from the maintenance tool
qt_path: str # C:\Qt
qt_bin_path: str # C:\Qt\6.3.2\msvc2019_64
qt_version: str
qt_ifw_version: str
ifw_root_path: str
cmake_toolchain_file: str
aqt_install_qt_packages: str
aqt_install_tool_packages: str
executable_file_ending: str
build_folder: str
bin_dir: str
screenplay_version: str
# CMake variables need str: "ON" or "OFF"
build_steam: str
build_tests: str
build_deploy: str
build_type: str
build_architecture: str
create_installer: str
sign_osx: bool
def execute(
build_config: BuildConfig
) -> BuildResult:
@ -114,11 +67,12 @@ def execute(
step_time = time.time()
build_installer(build_config, build_result)
build_installer_duration = time.time() - step_time
print(f"⏱️ build_installer_duration: {build_installer_duration}s")
print(f"⏱️ build_installer_duration: {build_installer_duration}s")
if platform.system() == "Darwin":
if (build_config.sign_osx):
print(f"Sign ScreenPlay-installer.dmg at: {build_config.bin_dir}")
print(
f"Sign ScreenPlay-installer.dmg at: {build_config.bin_dir}")
macos_sign.sign_dmg(build_config=build_config)
# Create a zip file of the build

View File

@ -9,6 +9,8 @@ from pathlib import Path
import platform
import paramiko
import defines
from build_result import BuildResult
from build_config import BuildConfig
from util import sftp_exists, get_latest_git_tag, parse_semver, semver_to_string
from sys import stdout
@ -51,9 +53,9 @@ if __name__ == "__main__":
print("No git tags found.")
exit(-1)
build_result = build.BuildResult()
build_result = BuildResult()
build_config = build.BuildConfig()
build_config = BuildConfig()
build_config.qt_version = defines.QT_VERSION
build_config.qt_ifw_version = defines.QT_IFW_VERSION
build_config.build_steam = "ON"

29
Tools/build_config.py Normal file
View File

@ -0,0 +1,29 @@
class BuildConfig:
root_path: str
cmake_osx_architectures: str
cmake_target_triplet: str
package: bool
osx_bundle: str
package_command: str
executable_file_ending: str
# qt_* use either aqt or from the maintenance tool
qt_path: str # C:\Qt
qt_bin_path: str # C:\Qt\6.3.2\msvc2019_64
qt_version: str
qt_ifw_version: str
ifw_root_path: str
cmake_toolchain_file: str
aqt_install_qt_packages: str
aqt_install_tool_packages: str
executable_file_ending: str
build_folder: str
bin_dir: str
screenplay_version: str
# CMake variables need str: "ON" or "OFF"
build_steam: str
build_tests: str
build_deploy: str
build_type: str
build_architecture: str
create_installer: str
sign_osx: bool

20
Tools/build_result.py Normal file
View File

@ -0,0 +1,20 @@
from pathlib import Path
class BuildResult:
# Windows example with absolute paths:
# [...]/build-x64-windows-release/
build: Path
# [...]/build-x64-windows-release/bin
bin: Path
# [...]/build-x64-windows-release/ScreenPlay-Installer.exe
installer: Path
# [...]/build-x64-windows-release/ScreenPlay-Installer.zip
installer_zip: Path
# [...]/build-x64-windows-release/ScreenPlay-0.X.0-RCX-x64-windows-release.zip
build_zip: Path
# [...]/build-x64-windows-release/ScreenPlay-0.X.0-RCX-x64-windows-release.txt :sha256, needed for scoop
build_hash: Path
# x64, arm64, universal
build_arch: str

View File

@ -1,34 +1,32 @@
#!/usr/bin/python3
# SPDX-License-Identifier: LicenseRef-EliasSteurerTachiom OR AGPL-3.0-only
from build import BuildConfig
from util import run
from build_config import BuildConfig
from util import run
from sys import stdout
import time
stdout.reconfigure(encoding='utf-8')
def sign(build_config: BuildConfig):
print("Run codedesign")
#run("codesign -f -s 'Developer ID Application: Elias Steurer (V887LHYKRH)' --verbose --force --timestamp --options 'runtime' -f --entitlements '../../ScreenPlay/entitlements.plist' 'ScreenPlay.app/' ",
# run("codesign -f -s 'Developer ID Application: Elias Steurer (V887LHYKRH)' --verbose --force --timestamp --options 'runtime' -f --entitlements '../../ScreenPlay/entitlements.plist' 'ScreenPlay.app/' ",
# cwd=build_config.bin_dir)
# Do not use --deep https://developer.apple.com/forums/thread/129980
# base_sign_command = "codesign -s \"Developer ID Application: Elias Steurer (V887LHYKRH)\" --verbose --force --timestamp --options \"runtime\" \"ScreenPlay.app/Contents/MacOS/{app}\""
# run(base_sign_command.format(app="ffmpeg"), cwd=build_config.bin_dir)
# run(base_sign_command.format(app="ffprobe"), cwd=build_config.bin_dir)
run("codesign --deep -s \"Developer ID Application: Elias Steurer (V887LHYKRH)\" --verbose --force --timestamp --options \"runtime\" --entitlements \"../../ScreenPlay/entitlements.plist\" \"ScreenPlay.app/\"",
run("codesign --deep -s \"Developer ID Application: Elias Steurer (V887LHYKRH)\" --verbose --force --timestamp --options \"runtime\" --entitlements \"../../ScreenPlay/entitlements.plist\" \"ScreenPlay.app/\"",
cwd=build_config.bin_dir)
print("Run codedesign verify")
run("codesign --verify --verbose=4 'ScreenPlay.app/'",
run("codesign --verify --verbose=4 'ScreenPlay.app/'",
cwd=build_config.bin_dir)
# Note the profile is the one name of the first step of (App Store Connect API) in the macOSSigning.md
# xcrun notarytool submit "ScreenPlay.app.zip" --keychain-profile "ScreenPlay" --wait
# xcrun stapler staple "ScreenPlay.app"
print("Packing .apps for upload")
run("ditto -c -k --keepParent 'ScreenPlay.app' 'ScreenPlay.app.zip'", cwd=build_config.bin_dir)
run("ditto -c -k --keepParent 'ScreenPlay.app' 'ScreenPlay.app.zip'",
cwd=build_config.bin_dir)
# run this if you get an error:
# `xcrun notarytool log --apple-id "xxxxx@xxxx.com" --password "xxxx-xxxx-xxxx-xxxx" --team-id "xxxxxxxxxxx" <ID>`
@ -36,7 +34,8 @@ def sign(build_config: BuildConfig):
# id: xxxxxx-xxxxxx-xxxx-xxxxx-xxxxx
# status: Invalid
print("Run xcnotary submit")
run("xcrun notarytool submit --keychain-profile 'ScreenPlay' ScreenPlay.app.zip --wait", cwd=build_config.bin_dir)
run("xcrun notarytool submit --keychain-profile 'ScreenPlay' ScreenPlay.app.zip --wait",
cwd=build_config.bin_dir)
print("Run stapler staple")
run("xcrun stapler staple ScreenPlay.app", cwd=build_config.bin_dir)
@ -46,24 +45,30 @@ def sign(build_config: BuildConfig):
print("Remove ScreenPlay.app.zip.")
run("rm ScreenPlay.app.zip", cwd=build_config.bin_dir)
def sign_dmg(build_config: BuildConfig):
# Sign the DMG
run("codesign -f -s \"Developer ID Application: Elias Steurer (V887LHYKRH)\" --timestamp --options \"runtime\" -f --deep \"ScreenPlay-Installer.dmg\"", cwd=build_config.build_folder)
# Verify the DMG's signature
run("codesign --verify --verbose=4 \"ScreenPlay-Installer.dmg\"", cwd=build_config.build_folder)
run("codesign --verify --verbose=4 \"ScreenPlay-Installer.dmg\"",
cwd=build_config.build_folder)
# Pack the DMG for notarization
run("ditto -c -k --keepParent ScreenPlay-Installer.dmg ScreenPlay-Installer.dmg.zip", cwd=build_config.build_folder)
run("ditto -c -k --keepParent ScreenPlay-Installer.dmg ScreenPlay-Installer.dmg.zip",
cwd=build_config.build_folder)
# Notarize the DMG using notarytool
run("xcrun notarytool submit ScreenPlay-Installer.dmg.zip --keychain-profile 'ScreenPlay' --wait", cwd=build_config.build_folder)
run("xcrun notarytool submit ScreenPlay-Installer.dmg.zip --keychain-profile 'ScreenPlay' --wait",
cwd=build_config.build_folder)
# Staple the notarization ticket to the DMG
run("xcrun stapler staple ScreenPlay-Installer.dmg", cwd=build_config.build_folder)
run("xcrun stapler staple ScreenPlay-Installer.dmg",
cwd=build_config.build_folder)
# Check the notarization status for the DMG
run("spctl --assess --verbose \"ScreenPlay-Installer.dmg\"", cwd=build_config.build_folder)
run("spctl --assess --verbose \"ScreenPlay-Installer.dmg\"",
cwd=build_config.build_folder)
# Clean up the zip file
run("rm ScreenPlay-Installer.dmg.zip", cwd=build_config.build_folder)