Welcome to mirror list, hosted at ThFree Co, Russian Federation.

dev.gajim.org/gajim/gajim.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/.ci
diff options
context:
space:
mode:
authorlovetox <philipp@hoerist.com>2022-05-22 16:00:37 +0300
committerlovetox <philipp@hoerist.com>2022-05-22 22:58:34 +0300
commitce5c3f48c49b06a004828e72f6330828fb841327 (patch)
tree484364f6d62b65d669e66d48d8c755c9b51eb5d2 /.ci
parentc88a131bc02ea7d1fe04d0960c8c28cb594f0b77 (diff)
ci: Add debian build script
Diffstat (limited to '.ci')
-rwxr-xr-x.ci/debian_build.py99
1 files changed, 99 insertions, 0 deletions
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)