aboutsummaryrefslogtreecommitdiff
path: root/src_doit/dist/__init__.py
diff options
context:
space:
mode:
authorbozo.kopic <bozo@kopic.xyz>2021-11-07 15:52:44 +0100
committerbozo.kopic <bozo@kopic.xyz>2021-12-18 02:38:50 +0100
commit0702d13263bf501c1db074ce1544e60b95161210 (patch)
treeebca76946cead0ffcc742a64c15dd6f5e79958fa /src_doit/dist/__init__.py
parent56a75fcb8f5a9e4c05ccec8eb4a3345a115da441 (diff)
major rewritev0.3.0
Diffstat (limited to 'src_doit/dist/__init__.py')
-rw-r--r--src_doit/dist/__init__.py113
1 files changed, 113 insertions, 0 deletions
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']}