Search for a command to run...
[!NOTE] 7.9.0 is available on ๐ PyPI and ๐ GitHub. Add flatten_config_keys() utility to flatten nested config dicts into a single level by joining keys with a separator. Flatten nested config dicts before dataclass field matching in config_schema, so nested TOML sub-tables (e.g. [tool.myapp.sub-section]) map to flat dataclass fields (e.g. sub_section_key). Add schema_strict parameter to ConfigOption and ExtraCommand/ExtraGroup: when True, unknown config keys raise ValueError during dataclass schema validation instead of being silently dropped. Auto-discover pyproject.toml from the current working directory upward to the VCS root before falling back to the app config directory. Matches the discovery behavior of uv, ruff, and mypy. Only active during auto-discovery (not when --config is passed explicitly). Instantiate config_schema defaults when no config file is found, so get_tool_config() never returns None when a schema is configured. Forward included_params from ExtraCommand/ExtraGroup to ConfigOption. Allows @group(included_params=()) to disable merge_default_map when config keys are schema-only and would collide with subcommand names. Move prebake_version(), prebake_dunder(), and discover_package_init_files() from ExtraVersionOption static methods to module-level functions in click_extra.version. Import them directly: from click_extra.version import prebake_version. Add git_tag template field. Resolved from a __git_tag__ dunder or git describe --tags --exact-match HEAD at runtime. Returns the tag name if HEAD is at a tagged commit. Add git_tag_sha template field. Resolved from a __git_tag_sha__ dunder on the CLI module, with a git subprocess fallback. Replaces the old __tag_sha__ convention. Git template fields (git_branch, git_long_hash, git_short_hash, git_date) now check for pre-baked __<field>__ dunders on the CLI module before falling back to subprocess calls. Enables compiled binaries (Nuitka/PyInstaller) to embed git metadata at build time. Add click-extra prebake CLI with three subcommands: prebake all bakes __version__ and all git fields in one pass, prebake version injects Git hashes into __version__, and prebake field replaces any empty dunder variable. Field names auto-wrap with __...__ (e.g. git_tag_sha becomes __git_tag_sha__). All subcommands auto-discover target files from [project.scripts]. Add empty __git_*__ dunder placeholders to click_extra/__init__.py for dogfooding the prebake system. Pin image URLs in readme.md and docs/tutorial.md to the release tag at bump time, and restore them to main on the next dev bump. Full changelog: v7.8.0...v7.9.0