Source code for rez.release_hook

# SPDX-License-Identifier: Apache-2.0
# Copyright Contributors to the Rez Project


from rez.utils.logging_ import print_warning, print_debug
from rez.packages import get_developer_package
from rez.vendor.enum import Enum


[docs]def get_release_hook_types(): """Returns the available release hook implementations.""" from rez.plugin_managers import plugin_manager return plugin_manager.get_plugins('release_hook')
[docs]def create_release_hook(name, source_path): """Return a new release hook of the given type.""" from rez.plugin_managers import plugin_manager return plugin_manager.create_instance('release_hook', name, source_path=source_path)
[docs]def create_release_hooks(names, source_path): hooks = [] for name in names: try: hook = create_release_hook(name, source_path) hooks.append(hook) except Exception: import traceback print_warning("Release hook '%s' is not available." % name) print_debug(traceback.format_exc()) return hooks
[docs]class ReleaseHook(object): """An object that allows for custom behaviour during releases. A release hook provides methods that you implement to inject custom behaviour during parts of the release process. For example, the builtin 'email' hook sends a post-release email to a configured address. """
[docs] @classmethod def name(cls): """ Return name of source retriever, eg 'git'""" raise NotImplementedError
def __init__(self, source_path): """Create a release hook. Args: source_path: Path containing source that was released. """ self.source_path = source_path self.package = get_developer_package(source_path) self.type_settings = self.package.config.plugins.release_hook self.settings = self.type_settings.get(self.name())
[docs] def pre_build(self, user, install_path, variants=None, release_message=None, changelog=None, previous_version=None, previous_revision=None, **kwargs): """Pre-build hook. Args: user: Name of person who did the release. install_path: Directory the package was installed into. variants: List of variant indices we are attempting to build, or None release_message: User-supplied release message. changelog: List of strings describing changes since last release. previous_version: Version object - previously-release package, or None if no previous release. previous_revision: Revision of previously-released package (type depends on repo - see ReleaseVCS.get_current_revision(). kwargs: Reserved. Note: This method should raise a `ReleaseHookCancellingError` if the release process should be cancelled. """ pass
[docs] def pre_release(self, user, install_path, variants=None, release_message=None, changelog=None, previous_version=None, previous_revision=None, **kwargs): """Pre-release hook. This is called before any package variants are released. Args: user: Name of person who did the release. install_path: Directory the package was installed into. variants: List of variant indices we are attempting to release, or None release_message: User-supplied release message. changelog: List of strings describing changes since last release. previous_version: Version object - previously-release package, or None if no previous release. previous_revision: Revision of previously-releaved package (type depends on repo - see ReleaseVCS.get_current_revision(). kwargs: Reserved. Note: This method should raise a `ReleaseHookCancellingError` if the release process should be cancelled. """ pass
[docs] def post_release(self, user, install_path, variants, release_message=None, changelog=None, previous_version=None, previous_revision=None, **kwargs): """Post-release hook. This is called after all package variants have been released. Args: user: Name of person who did the release. install_path: Directory the package was installed into. variants (list of `Variant`): The variants that have been released. release_message: User-supplied release message. changelog: List of strings describing changes since last release. previous_version: Version of previously-release package, None if no previous release. previous_revision: Revision of previously-releaved package (type depends on repo - see ReleaseVCS.get_current_revision(). kwargs: Reserved. """ pass
[docs]class ReleaseHookEvent(Enum): """Enum to help manage release hooks.""" pre_build = ("pre-build", "build", "pre_build") pre_release = ("pre-release", "release", "pre_release") post_release = ("post-release", "release", "post_release") def __init__(self, label, noun, func_name): self.label = label self.noun = noun self.__name__ = func_name