copiertv¶
📋 A generic validator for Copier templates. Instantiates templates with various preset answer files (variants) and runs configurable validation commands against the generated projects.
Key Features¶
Configurable validation commands: Define validation commands in a TOML configuration file. The tool is agnostic about what gets validated.
Configurable answers directory: Specify where variant answer files live. No hardcoded convention imposed.
Placeholder interpolation: Use
{template_directory},{project_directory},{temporary_directory}, and{variant}in command args and working directories.Copier Python API: Uses
copier.run_copydirectly instead of shelling out to a subprocess.Configuration hierarchy: CLI arguments, per-project config, and per-user config (via
emcd-appcore) with clear precedence.Structured error handling: Domain-specific exceptions with Markdown rendering for terminal display.
Installation 📦¶
Method: Install Executable Script¶
Install via the uv
tool command:
uv tool install copiertv
or, run directly with uvx:
uvx copiertv
Or, install via pipx:
pipx install copiertv
Method: Install Python Package¶
Install via uv pip
command:
uv pip install copiertv
Or, install via pip:
pip install copiertv
Usage¶
Survey Variants¶
List available template variants (reads answers directory from configuration):
copiertv survey
Validate a Variant¶
Validate a template variant:
copiertv validate default
Preserve the generated project for inspection:
copiertv validate --preserve default
Configuration File¶
Create .auxiliary/configuration/copiertv/general.toml in your
template repository:
[answers]
directory = "data/copier"
[[commands]]
args = ["hatch", "env", "prune"]
[[commands]]
args = ["hatch", "--env", "develop", "run", "make-all"]
[options]
preserve = false
unsafe = false
Commands support placeholder interpolation for paths:
[[commands]]
args = ["make", "check", "--source", "{project_directory}"]
cwd = "{template_directory}"
Available placeholders: {template_directory}, {project_directory},
{temporary_directory}, {variant}.
Contribution 🤝¶
Contribution to this project is welcome! However, it must follow the code of conduct for the project.
Please file bug reports and feature requests in the issue tracker or submit pull requests to improve the source code or documentation.
For development guidance and standards, please see the development guide.