Browse Source

Build bare tarball

Valentin Niess 7 months ago
parent
commit
5cf73a59d6
2 changed files with 29 additions and 13 deletions
  1. 3 1
      python_appimage/__main__.py
  2. 26 12
      python_appimage/commands/build/manylinux.py

+ 3 - 1
python_appimage/__main__.py

@@ -79,7 +79,9 @@ def main():
     build_manylinux_parser.add_argument('abi',
         help='python ABI (e.g. cp37-cp37m)')
     build_manylinux_parser.add_argument('-c', '--clean',
-        help='compress the image after extraction', action='store_true')
+        help='clean the cache after extraction', action='store_true')
+    build_manylinux_parser.add_argument('-t', '--tarball',
+        help='build a bare tarball instead of an AppImage', action='store_true')
 
     build_app_parser = build_subparsers.add_parser('app',
         description='Build a Python application using a base AppImage')

+ 26 - 12
python_appimage/commands/build/manylinux.py

@@ -1,9 +1,11 @@
 import os
 from pathlib import Path
+import tarfile
 import shutil
 
 from ...appimage import build_appimage
 from ...manylinux import ensure_image, PythonExtractor
+from ...utils.log import log
 from ...utils.tmp import TemporaryDirectory
 
 
@@ -13,10 +15,10 @@ __all__ = ['execute']
 def _unpack_args(args):
     '''Unpack command line arguments
     '''
-    return args.tag, args.abi, args.clean
+    return args.tag, args.abi, args.clean, args.tarball
 
 
-def execute(tag, abi, clean):
+def execute(tag, abi, clean, tarball):
     '''Build a Python AppImage using a Manylinux image
     '''
 
@@ -30,7 +32,8 @@ def execute(tag, abi, clean):
             tag = abi
         )
         appdir = Path(tmpdir) / 'AppDir'
-        python_extractor.extract(appdir, appify=True)
+        appify = not tarball
+        python_extractor.extract(appdir, appify=appify)
 
         fullname = '-'.join((
             f'{python_extractor.impl}{python_extractor.version.long()}',
@@ -38,12 +41,23 @@ def execute(tag, abi, clean):
             f'{image.tag}_{image.arch}'
         ))
 
-        destination = f'{fullname}.AppImage'
-        build_appimage(
-            appdir = str(appdir),
-            destination = destination
-        )
-        shutil.copy(
-            Path(tmpdir) / destination,
-            Path(pwd) / destination
-        )
+        if tarball:
+            log('COMPRESS', fullname)
+            destination = f'{fullname}.tgz'
+            tar_path = Path(tmpdir) / destination
+            with tarfile.open(tar_path, "w:gz") as tar:
+                tar.add(appdir, arcname=fullname)
+            shutil.copy(
+                tar_path,
+                Path(pwd) / destination
+            )
+        else:
+            destination = f'{fullname}.AppImage'
+            build_appimage(
+                appdir = str(appdir),
+                destination = destination
+            )
+            shutil.copy(
+                Path(tmpdir) / destination,
+                Path(pwd) / destination
+            )