ansible-koji/roles/koji_hub/files/sigul_sign.py
Rénich Bon Ćirić 89d6f66be8
feat: Integración de Siguldry PKCS#11 y spooler de firmas
* Implementación del rol de Ansible 'siguldry' para CentOS Stream 10
* Migración del plugin de firmas de Koji Hub a un spooler asíncrono
* Modificación de roles para utilizar empaquetamiento RPM nativo de siguldry-pkcs11
* Documentación de decisiones (ADRs) y roadmap en docs/technical/
* Limpieza de binarios locales pesados de PKCS#11 en Ansible

Co-developed-by: Gemini AI <renich+gemini@woralelandia.com>
Signed-off-by: Rénich Bon Ćirić <renich@woralelandia.com>
2026-06-16 10:06:44 -06:00

43 lines
No EOL
1.3 KiB
Python

import koji
from koji.plugin import callback
import logging
import os
logger = logging.getLogger('koji.plugin.sigul_sign')
SPOOL_DIR = '/var/spool/koji-sign/queue'
@callback('postBuildStateChange')
def sigul_sign(cbtype, *args, **kws):
"""
Called after a build state changes.
We will queue the build for signing if the state changed to COMPLETE.
"""
if kws.get('attribute') != 'state':
return
if kws.get('new') != koji.BUILD_STATES['COMPLETE']:
return
build = kws.get('info')
if not build:
logger.error("No build info found in callback.")
return
build_id = build['id']
build_nvr = build.get('nvr', str(build_id))
# Ensure spool directory exists
try:
if not os.path.exists(SPOOL_DIR):
os.makedirs(SPOOL_DIR, mode=0o770)
except Exception as e:
logger.error(f"Failed to create spool directory {SPOOL_DIR}: {e}")
return
spool_file = os.path.join(SPOOL_DIR, str(build_id))
try:
with open(spool_file, 'w') as f:
f.write(f"{build_nvr}\n")
logger.info(f"Queued build {build_id} ({build_nvr}) for signing in {spool_file}")
except Exception as e:
logger.error(f"Failed to queue build {build_id} for signing: {e}")