On this page
Shared utilities for release commands: project root detection, git auth verification, working tree guards, and release file loading.
#rlsbl.commands.release.shared
#rlsbl.commands.release.shared
Shared utilities for release commands: project root detection, git auth verification, working tree guards, and release file loading.
#load_release_env
def load_release_env(config)Load the config's env_file into os.environ. THE entry helper.
Every command that can reach a deploy step, a release hook or a local publish pipeline must call this before it does -- release run, release resume, deploy, and the batch orchestrator for its own root-level work. This used to live inline in _run_cmd_inner only, so a release resume re-ran exactly the steps that need those credentials (deploy, post-release hooks) with none of them loaded: the failure the resume existed to fix came back wearing a different error message.
Returns the resolved env_file value, or None when none is configured. A configured-but-absent file raises :class:~rlsbl.errors.ConfigError (see :func:rlsbl.config.load_env_file).
#build_release_flags
def build_release_flags(dry_run, quiet, allow_dirty, watch=False, push_timeout=None, ci_timeout=None, check_timeout=None, hook_timeout=None)Build the standard release flags dict from CLI arguments.
The four timeout entries are the CLI overrides (--push-timeout, --ci-timeout, --check-timeout, --hook-timeout). Each is None when its flag was not passed, in which case the matching config key and then the shipped default win.
#apply_timeout_overrides
def apply_timeout_overrides(config, flags)Write the release invocation's timeout flags into the in-memory config.
--push-timeout and --ci-timeout reach their consumers directly (the executor holds both the flags dict and the config), but --check-timeout and --hook-timeout are consumed by the check framework and the hook runner, which receive only a :class:ProjectContext. Their overrides therefore land on the config dict -- exactly the place every consumer already reads (get_check_timeout / get_hook_timeout), so one mechanism covers built-in checks, external checks, and hooks alike.
A flag that was not passed is None and leaves the config untouched, so the documented precedence (flag > config key > shipped default) holds.
Each value is validated BEFORE it is written, so an invalid flag value is reported against the flag ("Invalid --check-timeout value: -5") instead of resurfacing downstream as "Invalid check_timeout in .rlsbl/config.json" -- a file the operator never touched.