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}")