From 0702d13263bf501c1db074ce1544e60b95161210 Mon Sep 17 00:00:00 2001 From: "bozo.kopic" Date: Sun, 7 Nov 2021 15:52:44 +0100 Subject: major rewrite --- src_doit/dist/__init__.py | 113 +++++++++++++++++++++++++++++++++ src_doit/dist/container/Dockerfile | 6 ++ src_doit/dist/windows/opcut-server.bat | 2 + src_doit/dist/windows/opcut.bat | 2 + 4 files changed, 123 insertions(+) create mode 100644 src_doit/dist/__init__.py create mode 100644 src_doit/dist/container/Dockerfile create mode 100644 src_doit/dist/windows/opcut-server.bat create mode 100644 src_doit/dist/windows/opcut.bat (limited to 'src_doit/dist') diff --git a/src_doit/dist/__init__.py b/src_doit/dist/__init__.py new file mode 100644 index 0000000..de8d98c --- /dev/null +++ b/src_doit/dist/__init__.py @@ -0,0 +1,113 @@ +from pathlib import Path +import subprocess +import zipfile +import sys + +from hat.doit import common + + +__all__ = ['task_dist', + 'task_dist_windows', + 'task_dist_container'] + + +package_path = Path(__file__).parent + +build_dir = Path('build') +cache_dir = Path('cache') + +build_windows_dir = build_dir / f'opcut-{common.get_version()}-windows' +build_container_dir = build_dir / f'opcut-{common.get_version()}-container' + +win_python_url = 'https://www.python.org/ftp/python/3.9.7/python-3.9.7-embed-amd64.zip' # NOQA +cache_win_python_path = cache_dir / win_python_url.split('/')[-1] + + +def task_dist(): + """Build distribution""" + + return {'actions': None, + 'task_dep': ['dist_windows', + 'dist_container']} + + +def task_dist_windows(): + """Build windows distribution""" + + def build(): + common.rm_rf(build_windows_dir) + common.mkdir_p(build_windows_dir.parent) + common.cp_r(package_path / 'windows', build_windows_dir) + + common.mkdir_p(cache_dir) + if not cache_win_python_path.exists(): + subprocess.run(['curl', '-s', + '-o', str(cache_win_python_path), + '-L', win_python_url], + check=True) + + python_dir = build_windows_dir / 'python' + common.mkdir_p(python_dir) + with zipfile.ZipFile(str(cache_win_python_path)) as f: + f.extractall(str(python_dir)) + + python_lib_path = python_dir / 'python39.zip' + python_lib_dir = python_dir / 'lib' + common.mkdir_p(build_windows_dir / 'python/lib') + with zipfile.ZipFile(str(python_lib_path)) as f: + f.extractall(str(python_lib_dir)) + common.rm_rf(python_lib_path) + + (python_dir / 'python39._pth').write_text( + '..\\packages\n' + 'lib\n' + '.\n' + 'import site\n' + ) + + packages_dir = build_windows_dir / 'packages' + common.mkdir_p(packages_dir) + + packages = [*(str(i) for i in (build_dir / 'dist').glob('*.whl'))] + subprocess.run(['pip', 'install', '-q', + '-t', str(packages_dir), + '--only-binary=:all:', + '--platform', 'win_amd64', + *packages], + check=True) + + zip_path = build_dir / f'{build_windows_dir.name}.zip' + common.rm_rf(zip_path) + with zipfile.ZipFile(str(zip_path), 'w', zipfile.ZIP_DEFLATED) as f: + for i in build_windows_dir.rglob('*'): + if i.is_dir(): + continue + f.write(str(i), str(i.relative_to(build_windows_dir))) + + return {'actions': [build], + 'task_dep': ['build']} + + +def task_dist_container(): + """Build container distribution""" + + def build(): + common.rm_rf(build_container_dir) + common.mkdir_p(build_container_dir.parent) + common.cp_r(package_path / 'container', build_container_dir) + + for i in (build_dir / 'dist').glob('*.whl'): + common.cp_r(i, build_container_dir / i.name) + + name = f'opcut:{common.get_version()}' + img_path = build_dir / f'{build_container_dir.name}.tar' + + subprocess.run(['podman', 'build', '-q', '-t', name, '.'], + cwd=str(build_container_dir), + check=True) + + subprocess.run(['podman', 'save', '-q', '-o', str(img_path), name], + check=True) + + return {'actions': [build], + 'task_dep': ['build']} diff --git a/src_doit/dist/container/Dockerfile b/src_doit/dist/container/Dockerfile new file mode 100644 index 0000000..32978c1 --- /dev/null +++ b/src_doit/dist/container/Dockerfile @@ -0,0 +1,6 @@ +FROM python:3.9-slim-bullseye +COPY *.whl . +RUN apt update -qy && \ + apt install -qy pkg-config gcc libcairo2-dev && \ + pip install -qq *.whl && \ + rm *.whl diff --git a/src_doit/dist/windows/opcut-server.bat b/src_doit/dist/windows/opcut-server.bat new file mode 100644 index 0000000..25ce4f9 --- /dev/null +++ b/src_doit/dist/windows/opcut-server.bat @@ -0,0 +1,2 @@ +@set PATH=%~dp0python;%PATH% +@python -m opcut server %* diff --git a/src_doit/dist/windows/opcut.bat b/src_doit/dist/windows/opcut.bat new file mode 100644 index 0000000..68ae30a --- /dev/null +++ b/src_doit/dist/windows/opcut.bat @@ -0,0 +1,2 @@ +@set PATH=%~dp0python;%PATH% +@python -m opcut %* -- cgit v1.2.3-70-g09d2