From 64962d1a63a817ebc0cb5cb528e784832370dc95 Mon Sep 17 00:00:00 2001 From: mr-forust Date: Wed, 7 Oct 2026 16:53:14 +0200 Subject: [PATCH] fix(cicd): preserve AIO tag in recovery snapshot --- .gitea/workflows/compose-release.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/.gitea/workflows/compose-release.py b/.gitea/workflows/compose-release.py index c82463f..3ca2f76 100644 --- a/.gitea/workflows/compose-release.py +++ b/.gitea/workflows/compose-release.py @@ -45,6 +45,7 @@ def prepare(source_file): before = json.loads(json.dumps(config)) for service, settings in config['services'].items(): reference = settings.get('image') + nextcloud_aio_master = project == 'nextcloud' and service == 'nextcloud-aio-mastercontainer' if not reference or settings.get('build'): raise ValueError(f'{project}/{service}: Compose deploy requires a published image') image_repo = reference.split('@')[0].rsplit('/', 1) @@ -52,7 +53,7 @@ def prepare(source_file): image_repo = '/'.join(image_repo) # Nextcloud AIO validates the mastercontainer image reference and rejects # a digest. Keep its configured tag so AIO can start and manage its stack. - if project == 'nextcloud' and service == 'nextcloud-aio-mastercontainer': + if nextcloud_aio_master: pinned = reference elif image_repo in release['images']: pinned = image_repo + '@' + release['images'][image_repo] @@ -79,7 +80,12 @@ def prepare(source_file): actual.add(next((d for d in digests or [] if d.split('@')[0] == image_repo), image_id)) if len(actual) > 1: raise ValueError(f'{project}/{service}: mixed running images, cannot capture one recovery config') - before['services'][service]['image'] = next(iter(actual)) if actual else reference + # AIO also rejects a digest in its recovery config. Preserve its tag in + # both deploy and recovery files. + if nextcloud_aio_master: + before['services'][service]['image'] = reference + else: + before['services'][service]['image'] = next(iter(actual)) if actual else reference for name, data in (('compose', config), ('compose-before', before)): folder = directory / name folder.mkdir(mode=0o700, exist_ok=True)