Build bare tarball

This commit is contained in:
Valentin Niess
2025-05-22 09:55:15 +02:00
parent f746e5dae3
commit 5cf73a59d6
2 changed files with 29 additions and 13 deletions

View File

@@ -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')

View File

@@ -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
)