* 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>
43 lines
No EOL
1.3 KiB
Python
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}") |