From ce5c3f48c49b06a004828e72f6330828fb841327 Mon Sep 17 00:00:00 2001 From: lovetox Date: Sun, 22 May 2022 15:00:37 +0200 Subject: ci: Add debian build script --- .ci/debian_build.py | 99 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 99 insertions(+) create mode 100755 .ci/debian_build.py (limited to '.ci') diff --git a/.ci/debian_build.py b/.ci/debian_build.py new file mode 100755 index 000000000..8ec155f27 --- /dev/null +++ b/.ci/debian_build.py @@ -0,0 +1,99 @@ +#!/usr/bin/env python3 + +from __future__ import annotations + +import argparse +import dataclasses +import logging +import shutil +import subprocess +from datetime import datetime +from datetime import timezone +from pathlib import Path + +LOG_FORMAT = '%(asctime)s %(levelname)s %(message)s' +logging.basicConfig(format=LOG_FORMAT, level=logging.DEBUG) +log = logging.getLogger() + +ROOT_DIR = Path(__file__).resolve().parent.parent +BUILD_DIR = ROOT_DIR / 'debian_build' + +DATE = datetime.now().strftime('%Y%m%d') +DATE_TIME = datetime.now(tz=timezone.utc).strftime('%a, %d %b %Y %T %z') + + +@dataclasses.dataclass +class ReleaseContext: + app: str + pkg_name: str + release_name: str + release_dir: Path + tarball: Path + + @classmethod + def from_tarball(cls, path: str) -> ReleaseContext: + tarball = Path(path) + app = tarball.name.split('-', maxsplit=1)[0] + pkg_name = f'{app}-nightly' + release_name = f'{pkg_name}_{DATE}' + release_dir = BUILD_DIR / release_name + return cls(app=app, + pkg_name=pkg_name, + release_name=release_name, + release_dir=release_dir, + tarball=tarball) + + +def clean_build_dir() -> None: + log.info('Cleanup build directory') + if BUILD_DIR.exists(): + shutil.rmtree(BUILD_DIR) + BUILD_DIR.mkdir() + + +def prepare_package_dir(context: ReleaseContext) -> None: + log.info('Extract tarball') + tarball = Path(shutil.copy(context.tarball, BUILD_DIR)) + tarball = tarball.rename(BUILD_DIR / f'{context.release_name}.orig.tar.gz') + shutil.unpack_archive(tarball, BUILD_DIR) + + log.info('Rename dir to: %s', context.release_name) + folder = list(BUILD_DIR.glob(f'{context.app}-?.?.?'))[0] + folder = folder.rename(context.release_dir) + + log.info('Copy debian folder into release directory') + shutil.copytree(ROOT_DIR / 'debian', context.release_dir / 'debian') + + +def prepare_changelog(context: ReleaseContext) -> None: + log.info('Prepare Changelog') + changelog = context.release_dir / 'debian' / 'changelog' + content = changelog.read_text() + content = content.replace('{DATE}', DATE) + content = content.replace('{DATE_TIME}', DATE_TIME) + changelog.write_text(content) + + +def build(context: ReleaseContext) -> None: + log.info('Start package build') + subprocess.run( + [ + 'dpkg-buildpackage', + '-rfakeroot', + '--no-sign' + ], + cwd=context.release_dir, + check=True) + + +if __name__ == '__main__': + parser = argparse.ArgumentParser(description='Build debian package') + parser.add_argument('tarball', help='Path to tarball e.g. app.tar.gz') + args = parser.parse_args() + + context = ReleaseContext.from_tarball(args.tarball) + + clean_build_dir() + prepare_package_dir(context) + prepare_changelog(context) + build(context) -- cgit v1.2.3