From 81e4b4f0d2e22c3457b1b12cef20f8fc7b4a7bf7 Mon Sep 17 00:00:00 2001 From: fireundubh Date: Sun, 29 May 2022 00:56:59 -0700 Subject: [PATCH 1/2] Updated build script Added icon and version information to executable --- .github/workflows/nuitka.yml | 4 +-- build.py | 56 +++++++++++++++++++++-------------- fire.ico | Bin 0 -> 140206 bytes requirements.txt | 1 + 4 files changed, 37 insertions(+), 24 deletions(-) create mode 100644 fire.ico diff --git a/.github/workflows/nuitka.yml b/.github/workflows/nuitka.yml index 20159e81..0fdf414e 100644 --- a/.github/workflows/nuitka.yml +++ b/.github/workflows/nuitka.yml @@ -21,11 +21,11 @@ jobs: - name: Set up Visual Studio environment if: success() uses: seanmiddleditch/gha-setup-vsdevenv@master - - name: Set up Python 3.9.4 (x64) + - name: Set up Python 3.10.4 (x64) if: success() uses: actions/setup-python@v2 with: - python-version: 3.9.4 + python-version: 3.10.4 architecture: x64 - name: Create virtual environment if: success() diff --git a/build.py b/build.py index 5c92b353..82d09261 100644 --- a/build.py +++ b/build.py @@ -7,6 +7,8 @@ import sys import zipfile +from pyro.Comparators import endswith + class Application: logging.basicConfig(level=logging.INFO, format='%(asctime)s [%(levelname).4s] %(message)s') @@ -24,25 +26,38 @@ def __init__(self, args: argparse.Namespace) -> None: self.root_tools_path: str = os.path.join(self.root_path, 'tools') self.dist_tools_path: str = os.path.join(self.dist_path, 'tools') + self.site_path: str = os.path.join(self.dist_path, 'site') + self.zip_path: str = os.path.join(self.root_path, 'bin', f'{self.package_name}.zip') + + self.dist_glob_pattern: str = os.path.join(self.dist_path, r'**\*') + + self.icon_path: str = os.path.join(self.root_path, 'fire.ico') + + pyro_version: str = '1.0.0.0' + self.nuitka_args: list = [ 'python', '-m', 'nuitka', '--standalone', 'pyro', '--include-package=pyro', - '--experimental=use_pefile', - '--python-flag=nosite', - f'--python-for-scons={sys.executable}', '--assume-yes-for-downloads', '--plugin-enable=multiprocessing', - '--show-progress', - '--plugin-enable=pkg-resources' + '--plugin-enable=pkg-resources', + '--msvc=14.3', + '--disable-ccache', + '--windows-company-name=fireundubh', + f'--windows-product-name={self.package_name.capitalize()}', + f'--windows-file-version={pyro_version}', + f'--windows-product-version={pyro_version}', + '--windows-file-description=https://github.com/fireundubh/pyro', + '--windows-icon-from-ico=fire.ico' ] def __setattr__(self, key: str, value: object) -> None: # sanitize paths - if isinstance(value, str) and key.endswith('path'): + if isinstance(value, str) and endswith(key, 'path', ignorecase=True): value = os.path.normpath(value) # normpath converts empty paths to os.curdir which we don't want - if value == '.': + if value == os.curdir: value = '' super(Application, self).__setattr__(key, value) @@ -57,6 +72,7 @@ def _clean_dist_folder(self) -> None: 'python37.dll', 'python38.dll', 'python39.dll', + 'python310.dll', '_elementpath.pyd', '_hashlib.pyd', '_multiprocessing.pyd', @@ -69,7 +85,7 @@ def _clean_dist_folder(self) -> None: 'unicodedata.pyd' ) - for f in glob.iglob(os.path.join(self.dist_path, r'**\*'), recursive=True): + for f in glob.iglob(self.dist_glob_pattern, recursive=True): if not os.path.isfile(f): continue @@ -80,7 +96,7 @@ def _clean_dist_folder(self) -> None: Application.log.warning(f'Deleting: "{f}"') os.remove(f) - for f in glob.iglob(os.path.join(self.dist_path, r'**\*'), recursive=True): + for f in glob.iglob(self.dist_glob_pattern, recursive=True): if not os.path.isdir(f): continue @@ -88,25 +104,21 @@ def _clean_dist_folder(self) -> None: Application.log.warning(f'Deleting empty folder: "{f}"') shutil.rmtree(f, ignore_errors=True) - site_dir: str = os.path.join(self.dist_path, 'site') - if os.path.exists(site_dir): - shutil.rmtree(site_dir, ignore_errors=True) + if os.path.exists(self.site_path): + shutil.rmtree(self.site_path, ignore_errors=True) - def _build_zip_archive(self) -> str: - zip_path: str = os.path.join(self.root_path, 'bin', f'{self.package_name}.zip') - os.makedirs(os.path.dirname(zip_path), exist_ok=True) + def _build_zip_archive(self) -> None: + os.makedirs(os.path.dirname(self.zip_path), exist_ok=True) - files: list = [f for f in glob.glob(os.path.join(self.dist_path, r'**\*'), recursive=True) + files: list = [f for f in glob.glob(self.dist_glob_pattern, recursive=True) if os.path.isfile(f)] - with zipfile.ZipFile(zip_path, 'w') as z: + with zipfile.ZipFile(self.zip_path, 'w') as z: for f in files: z.write(f, os.path.join(self.package_name, os.path.relpath(f, self.dist_path)), compress_type=zipfile.ZIP_STORED) Application.log.info(f'Added file to archive: {f}') - return zip_path - @staticmethod def exec_process(cmd: list, env: dict) -> int: try: @@ -126,7 +138,7 @@ def run(self) -> int: sys.exit(1) if self.vcvars64_path: - if not os.path.exists(self.vcvars64_path) or not self.vcvars64_path.endswith('.bat'): + if not os.path.exists(self.vcvars64_path) or not endswith(self.vcvars64_path, '.bat', ignorecase=True): Application.log.error('Cannot build Pyro with MSVC compiler because VsDevCmd path is invalid') sys.exit(1) @@ -193,9 +205,9 @@ def run(self) -> int: if not self.no_zip: Application.log.info('Building archive...') - zip_created: str = self._build_zip_archive() + self._build_zip_archive() - Application.log.info(f'Wrote archive: "{zip_created}"') + Application.log.info(f'Wrote archive: "{self.zip_path}"') Application.log.info('Build complete.') diff --git a/fire.ico b/fire.ico new file mode 100644 index 0000000000000000000000000000000000000000..2f8c4e449e70cf6c2244a6b2c139c99ac9715abb GIT binary patch literal 140206 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%0AGv^2hTf%!%-J38^ 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 Date: Sat, 2 Jul 2022 17:23:07 -0700 Subject: [PATCH 2/2] Added support for other pre/post events --- pyro/Application.py | 30 +++++++++++++++++++++- pyro/Constants.py | 8 ++++++ pyro/Enums/Event.py | 22 +++++++++++++++- pyro/PapyrusProject.py | 56 ++++++++++++++++++++++++++++++++++++++++- pyro/PapyrusProject.xsd | 8 ++++++ 5 files changed, 121 insertions(+), 3 deletions(-) diff --git a/pyro/Application.py b/pyro/Application.py index 58116bf3..c11593d6 100644 --- a/pyro/Application.py +++ b/pyro/Application.py @@ -4,7 +4,11 @@ import sys from pyro.Enums.Event import (BuildEvent, - ImportEvent) + ImportEvent, + CompileEvent, + AnonymizeEvent, + PackageEvent, + ZipEvent) from pyro.BuildFacade import BuildFacade from pyro.Comparators import startswith from pyro.PapyrusProject import PapyrusProject @@ -145,11 +149,23 @@ def run(self) -> int: ppj.try_run_event(BuildEvent.PRE) if build.scripts_count > 0: + if ppj.use_pre_compile_event: + ppj.try_run_event(CompileEvent.PRE) + build.try_compile() + if ppj.use_post_compile_event: + ppj.try_run_event(CompileEvent.POST) + if ppj.options.anonymize: if build.compile_data.failed_count == 0 or ppj.options.ignore_errors: + if ppj.use_pre_anonymize_event: + ppj.try_run_event(AnonymizeEvent.PRE) + build.try_anonymize() + + if ppj.use_post_anonymize_event: + ppj.try_run_event(AnonymizeEvent.POST) else: Application.log.error(f'Cannot anonymize scripts because {build.compile_data.failed_count} scripts failed to compile') sys.exit(build.compile_data.failed_count) @@ -158,7 +174,13 @@ def run(self) -> int: if ppj.options.package: if build.compile_data.failed_count == 0 or ppj.options.ignore_errors: + if ppj.use_pre_package_event: + ppj.try_run_event(PackageEvent.PRE) + build.try_pack() + + if ppj.use_post_package_event: + ppj.try_run_event(PackageEvent.POST) else: Application.log.error(f'Cannot create Packages because {build.compile_data.failed_count} scripts failed to compile') sys.exit(build.compile_data.failed_count) @@ -167,7 +189,13 @@ def run(self) -> int: if ppj.options.zip: if build.compile_data.failed_count == 0 or ppj.options.ignore_errors: + if ppj.use_pre_zip_event: + ppj.try_run_event(ZipEvent.PRE) + build.try_zip() + + if ppj.use_post_zip_event: + ppj.try_run_event(ZipEvent.POST) else: Application.log.error(f'Cannot create ZipFile because {build.compile_data.failed_count} scripts failed to compile') sys.exit(build.compile_data.failed_count) diff --git a/pyro/Constants.py b/pyro/Constants.py index ee967a14..e972e042 100644 --- a/pyro/Constants.py +++ b/pyro/Constants.py @@ -53,8 +53,16 @@ class XmlTagName(Constant): PAPYRUS_PROJECT: str = 'PapyrusProject' POST_BUILD_EVENT: str = 'PostBuildEvent' POST_IMPORT_EVENT: str = 'PostImportEvent' + POST_COMPILE_EVENT: str = 'PostCompileEvent' + POST_ANONYMIZE_EVENT: str = 'PostAnonymizeEvent' + POST_PACKAGE_EVENT: str = 'PostPackageEvent' + POST_ZIP_EVENT: str = 'PostZipEvent' PRE_BUILD_EVENT: str = 'PreBuildEvent' PRE_IMPORT_EVENT: str = 'PreImportEvent' + PRE_COMPILE_EVENT: str = 'PreCompileEvent' + PRE_ANONYMIZE_EVENT: str = 'PreAnonymizeEvent' + PRE_PACKAGE_EVENT: str = 'PrePackageEvent' + PRE_ZIP_EVENT: str = 'PreZipEvent' SCRIPTS: str = 'Scripts' VARIABLES: str = 'Variables' ZIP_FILE: str = 'ZipFile' diff --git a/pyro/Enums/Event.py b/pyro/Enums/Event.py index 42f558bb..1c7bf8e2 100644 --- a/pyro/Enums/Event.py +++ b/pyro/Enums/Event.py @@ -12,4 +12,24 @@ class ImportEvent(Enum): POST = 1 -Event = Union[BuildEvent, ImportEvent] +class CompileEvent(Enum): + PRE = 0 + POST = 1 + + +class AnonymizeEvent(Enum): + PRE = 0 + POST = 1 + + +class PackageEvent(Enum): + PRE = 0 + POST = 1 + + +class ZipEvent(Enum): + PRE = 0 + POST = 1 + + +Event = Union[BuildEvent, ImportEvent, CompileEvent, AnonymizeEvent, PackageEvent, ZipEvent] diff --git a/pyro/PapyrusProject.py b/pyro/PapyrusProject.py index 2ecaadc5..6511175a 100644 --- a/pyro/PapyrusProject.py +++ b/pyro/PapyrusProject.py @@ -12,7 +12,11 @@ from pyro.Enums.Event import (Event, BuildEvent, - ImportEvent) + ImportEvent, + CompileEvent, + AnonymizeEvent, + PackageEvent, + ZipEvent) from pyro.CommandArguments import CommandArguments from pyro.Comparators import (endswith, is_folder_node, @@ -45,6 +49,16 @@ class PapyrusProject(ProjectBase): zip_files_node: etree.ElementBase = None pre_build_node: etree.ElementBase = None post_build_node: etree.ElementBase = None + pre_import_node: etree.ElementBase = None + post_import_node: etree.ElementBase = None + pre_compile_node: etree.ElementBase = None + post_compile_node: etree.ElementBase = None + pre_anonymize_node: etree.ElementBase = None + post_anonymize_node: etree.ElementBase = None + pre_package_node: etree.ElementBase = None + post_package_node: etree.ElementBase = None + pre_zip_node: etree.ElementBase = None + post_zip_node: etree.ElementBase = None remote: RemoteBase = None remote_schemas: tuple = ('https:', 'http:') @@ -132,6 +146,30 @@ def bool_attr(element: etree.Element, attr_name: str) -> bool: self.post_import_node = self.ppj_root.find(XmlTagName.POST_IMPORT_EVENT) self.use_post_import_event = bool_attr(self.post_import_node, XmlAttributeName.USE_IN_BUILD) + self.pre_compile_node = self.ppj_root.find(XmlTagName.PRE_COMPILE_EVENT) + self.use_pre_compile_event = bool_attr(self.pre_compile_node, XmlAttributeName.USE_IN_BUILD) + + self.post_compile_node = self.ppj_root.find(XmlTagName.POST_COMPILE_EVENT) + self.use_post_compile_event = bool_attr(self.post_compile_node, XmlAttributeName.USE_IN_BUILD) + + self.pre_anonymize_node = self.ppj_root.find(XmlTagName.PRE_ANONYMIZE_EVENT) + self.use_pre_anonymize_event = bool_attr(self.pre_anonymize_node, XmlAttributeName.USE_IN_BUILD) + + self.post_anonymize_node = self.ppj_root.find(XmlTagName.POST_ANONYMIZE_EVENT) + self.use_post_anonymize_event = bool_attr(self.post_anonymize_node, XmlAttributeName.USE_IN_BUILD) + + self.pre_package_node = self.ppj_root.find(XmlTagName.PRE_PACKAGE_EVENT) + self.use_pre_package_event = bool_attr(self.pre_package_node, XmlAttributeName.USE_IN_BUILD) + + self.post_package_node = self.ppj_root.find(XmlTagName.POST_PACKAGE_EVENT) + self.use_post_package_event = bool_attr(self.post_package_node, XmlAttributeName.USE_IN_BUILD) + + self.pre_zip_node = self.ppj_root.find(XmlTagName.PRE_ZIP_EVENT) + self.use_pre_zip_event = bool_attr(self.pre_zip_node, XmlAttributeName.USE_IN_BUILD) + + self.post_zip_node = self.ppj_root.find(XmlTagName.POST_ZIP_EVENT) + self.use_post_zip_event = bool_attr(self.post_zip_node, XmlAttributeName.USE_IN_BUILD) + if self.options.package and self.packages_node is not None: if not self.options.package_path: self.options.package_path = self.packages_node.get(XmlAttributeName.OUTPUT) @@ -758,5 +796,21 @@ def try_run_event(self, event: Event) -> None: ProcessManager.run_event(self.pre_build_node, self.project_path) elif event == BuildEvent.POST: ProcessManager.run_event(self.post_build_node, self.project_path) + elif event == CompileEvent.PRE: + ProcessManager.run_event(self.pre_compile_node, self.project_path) + elif event == CompileEvent.POST: + ProcessManager.run_event(self.post_compile_node, self.project_path) + elif event == AnonymizeEvent.PRE: + ProcessManager.run_event(self.pre_anonymize_node, self.project_path) + elif event == AnonymizeEvent.POST: + ProcessManager.run_event(self.post_anonymize_node, self.project_path) + elif event == PackageEvent.PRE: + ProcessManager.run_event(self.pre_package_node, self.project_path) + elif event == PackageEvent.POST: + ProcessManager.run_event(self.post_package_node, self.project_path) + elif event == ZipEvent.PRE: + ProcessManager.run_event(self.pre_zip_node, self.project_path) + elif event == ZipEvent.POST: + ProcessManager.run_event(self.post_zip_node, self.project_path) else: raise NotImplementedError diff --git a/pyro/PapyrusProject.xsd b/pyro/PapyrusProject.xsd index 3b123853..10e33bce 100644 --- a/pyro/PapyrusProject.xsd +++ b/pyro/PapyrusProject.xsd @@ -22,6 +22,14 @@ + + + + + + + +