deb-mock/examples/plugins/ccache_plugin.py
robojerk c51819c836
Some checks failed
Build Deb-Mock Package / build (push) Failing after 1m9s
Lint Code / Lint All Code (push) Failing after 1s
Test Deb-Mock Build / test (push) Failing after 35s
Add comprehensive testing framework, performance monitoring, and plugin system
- Add complete pytest testing framework with conftest.py and test files
- Add performance monitoring and benchmarking capabilities
- Add plugin system with ccache plugin example
- Add comprehensive documentation (API, deployment, testing, etc.)
- Add Docker API wrapper for service deployment
- Add advanced configuration examples
- Remove old wget package file
- Update core modules with enhanced functionality
2025-08-19 20:49:32 -07:00

101 lines
3.6 KiB
Python

#!/usr/bin/env python3
"""
Sample ccache plugin for deb-mock
Demonstrates the plugin system capabilities
"""
requires_api_version = "1.0"
run_in_bootstrap = False
def init(plugin_manager, conf, deb_mock):
"""Plugin entry point"""
CCachePlugin(plugin_manager, conf, deb_mock)
class CCachePlugin:
"""Enables ccache in deb-mock chroots"""
def __init__(self, plugin_manager, conf, deb_mock):
self.plugin_manager = plugin_manager
self.conf = conf
self.deb_mock = deb_mock
# Plugin configuration with defaults
self.ccache_dir = conf.get('dir', '/var/cache/deb-mock/ccache')
self.max_cache_size = conf.get('max_cache_size', '2G')
self.show_stats = conf.get('show_stats', True)
self.compress = conf.get('compress', True)
self.hashdir = conf.get('hashdir', True)
self.debug = conf.get('debug', False)
# Register hooks
self._register_hooks()
# Add ccache to build dependencies
if hasattr(deb_mock.config, 'chroot_additional_packages'):
if 'ccache' not in deb_mock.config.chroot_additional_packages:
deb_mock.config.chroot_additional_packages.append('ccache')
print(f"CCache plugin initialized: cache_dir={self.ccache_dir}, max_size={self.max_cache_size}")
def _register_hooks(self):
"""Register plugin hooks"""
self.plugin_manager.add_hook("prebuild", self._ccache_prebuild)
self.plugin_manager.add_hook("postbuild", self._ccache_postbuild)
self.plugin_manager.add_hook("prechroot_init", self._ccache_prechroot_init)
def _ccache_prebuild(self, source_package, **kwargs):
"""Setup ccache before build starts"""
print(f"CCache: Setting up ccache for {source_package}")
# Set ccache environment variables
if hasattr(self.deb_mock.config, 'build_env'):
self.deb_mock.config.build_env.update({
'CCACHE_DIR': '/var/tmp/ccache',
'CCACHE_UMASK': '002',
'CCACHE_COMPRESS': str(self.compress),
'CCACHE_HASHDIR': '1' if self.hashdir else '0',
'CCACHE_DEBUG': '1' if self.debug else '0'
})
def _ccache_postbuild(self, build_result, source_package, **kwargs):
"""Show ccache statistics after build"""
if not self.show_stats:
return
print("CCache: Build completed, showing statistics...")
# In a real implementation, you would execute ccache --show-stats in the chroot
if build_result.get('success', False):
print(f"CCache: Build successful for {source_package}")
else:
print(f"CCache: Build failed for {source_package}")
def _ccache_prechroot_init(self, chroot_name):
"""Setup ccache in chroot before initialization"""
print(f"CCache: Setting up ccache in chroot {chroot_name}")
# Create ccache directory in chroot
chroot_ccache_dir = f"/var/tmp/ccache"
# In a real implementation, you would:
# 1. Create the ccache directory in the chroot
# 2. Set proper permissions
# 3. Mount the host ccache directory if configured
print(f"CCache: Created {chroot_ccache_dir} in chroot {chroot_name}")
# Example configuration for this plugin:
# plugin_conf = {
# 'ccache_enable': True,
# 'ccache_opts': {
# 'dir': '/var/cache/deb-mock/ccache',
# 'max_cache_size': '4G',
# 'show_stats': True,
# 'compress': True,
# 'hashdir': True,
# 'debug': False
# }
# }