From 9152671b1c01cd28680611614af8b3b78fe5ebab Mon Sep 17 00:00:00 2001 From: Philipp Dieter Date: Mon, 21 Mar 2022 21:32:23 +0100 Subject: [PATCH] [FEATURE] Add keep_versions to remove older versions after set threshold --- out | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/out b/out index b7bf357..e6db041 100755 --- a/out +++ b/out @@ -1,4 +1,5 @@ #!/usr/bin/env python3 +#pylint: disable=invalid-name ''' aptly-resource out @@ -14,9 +15,11 @@ import json import sys import os import hashlib +import functools from pprint import pprint from aptly_api import Client from aptly_api.base import AptlyAPIException +import semver BLOCK_SIZE = 65536 @@ -83,6 +86,41 @@ aptly.publish.update( force_overwrite = True ) +if 'keep_versions' in config['source'] \ + and config['source']['keep_versions'] > 0: + packages_delete = aptly.repos.search_packages( + 'datentonne', + config['source']['package'] + ' (<= ' + archive_filename_parts[1] + ')' + ) + + versions_delete = [] + for package in packages_delete: + package_data = package.key.split(' ') + versions_delete.append({ + 'version': package_data[2], + 'key': package.key, + }) + + def compare_func(a, b): + return semver.compare(a['version'], b['version']) + + versions_delete.sort(key=functools.cmp_to_key(compare_func)) + versions_delete.reverse() + + for i, package in enumerate(versions_delete): + if i >= config['source']['keep_versions']: + aptly.repos.delete_packages_by_key( + config['source']['repo'], + package['key'], + ) + + aptly.publish.update( + prefix = config['source']['repo'], + distribution = config['source']['distribution'], + force_overwrite = True + ) + + print(json.dumps({ 'version': {'version': archive_filename_parts[1]}, 'metadata': [