def build_release()

in detection_rules/devtools.py [0:0]


def build_release(ctx: click.Context, config_file, update_version_lock: bool, generate_navigator: bool,
                  generate_docs: str, update_message: str, release=None, verbose=True):
    """Assemble all the rules into Kibana-ready release files."""
    if RULES_CONFIG.bypass_version_lock:
        click.echo('WARNING: You cannot run this command when the versioning strategy is configured to bypass the '
                   'version lock. Set `bypass_version_lock` to `False` in the rules config to use the version lock.')
        ctx.exit()

    config = load_dump(config_file)['package']

    err_msg = f'No `registry_data` in package config. Please see the {get_etc_path("package.yaml")} file for an' \
              f' example on how to supply this field in {PACKAGE_FILE}.'
    assert 'registry_data' in config, err_msg

    registry_data = config['registry_data']

    if generate_navigator:
        config['generate_navigator'] = True

    if release is not None:
        config['release'] = release

    if verbose:
        click.echo(f'[+] Building package {config.get("name")}')

    package = Package.from_config(config=config, verbose=verbose)

    if update_version_lock:
        loaded_version_lock.manage_versions(package.rules, save_changes=True, verbose=verbose)

    package.save(verbose=verbose)

    previous_pkg_version = find_latest_integration_version("security_detection_engine", "ga",
                                                           registry_data['conditions']['kibana.version'].strip("^"))
    sde = SecurityDetectionEngine()
    historical_rules = sde.load_integration_assets(previous_pkg_version)
    current_pkg_version = Version.parse(registry_data['version'])
    # pre-release versions are not included in the version comparison
    # Version 8.17.0-beta.1 is considered lower than 8.17.0
    current_pkg_version_no_prerelease = Version(major=current_pkg_version.major,
                                                minor=current_pkg_version.minor, patch=current_pkg_version.patch)

    hist_versions_num = (
        MAX_HISTORICAL_VERSIONS_FOR_DIFF
        if current_pkg_version_no_prerelease >= MIN_DIFF_FEATURE_VERSION
        else MAX_HISTORICAL_VERSIONS_PRE_DIFF
    )
    click.echo(
        '[+] Limit historical rule versions in the release package for '
        f'version {current_pkg_version_no_prerelease}: {hist_versions_num} versions')
    limited_historical_rules = sde.keep_latest_versions(historical_rules, num_versions=hist_versions_num)

    package.add_historical_rules(limited_historical_rules, registry_data['version'])
    click.echo(f'[+] Adding historical rules from {previous_pkg_version} package')

    # NOTE: stopgap solution until security doc migration
    if generate_docs:
        click.echo(f'[+] Generating security docs for {registry_data["version"]} package')
        docs = IntegrationSecurityDocsMDX(registry_data['version'], Path(f'releases/{config["name"]}-docs'),
                                          True, limited_historical_rules, package, note=update_message)
        docs.generate()

    if verbose:
        package.get_package_hash(verbose=verbose)
        click.echo(f'- {len(package.rules)} rules included')

    return package