Skip to content

Developer Notes⚓︎

Local Development⚓︎

git clone https://github.com/kyleking/calcipy.git
cd calcipy
uv sync --all-extras

# See the available tasks
uv run calcipy
# Or use a local 'run' file (so that 'calcipy' can be extended)
./run

# Run the default task list (lint, auto-format, test coverage, etc.)
./run main

# Make code changes and run specific tasks as needed:
./run lint.fix test

# Install globally
uv tool install ".[ddict,doc,experimental,lint,nox,tags,test,types]" --force --editable

Shell Completion⚓︎

Calcipy supports shell completion via Invoke’s built-in completion scripts.

Zsh:

calcipy --print-completion-script zsh > ~/.calcipy-completion.zsh
echo 'source ~/.calcipy-completion.zsh' >> ~/.zshrc

Bash:

calcipy --print-completion-script bash > ~/.calcipy-completion.bash
echo 'source ~/.calcipy-completion.bash' >> ~/.bashrc

Fish:

calcipy --print-completion-script fish > ~/.config/fish/completions/calcipy.fish

For projects using ./run as the entry point, replace calcipy with the appropriate script name.

Maintenance⚓︎

Dependency upgrades can be accomplished with:

uv lock --upgrade
uv sync --all-extras

Publishing⚓︎

Publishing is automated via GitHub Actions using PyPI Trusted Publishing. Tag creation triggers automated publishing.

./run release              # Bumps version, creates tag, pushes → triggers publish
./run release --suffix=rc  # For pre-releases

Initial Setup⚓︎

One-time setup to enable PyPI Trusted Publishing:

Configure GitHub Environments

Repository Settings → Environments: - Create testpypi environment (no protection rules) - Create pypi environment with “Required reviewers” enabled

Register Trusted Publishers

PyPI: https://pypi.org/manage/project/calcipy/settings/publishing/ - Owner: kyleking - Repository: calcipy - Workflow: publish.yml - Environment: pypi - Or environment testpypi (for TestPyPI)

Manual Publishing⚓︎

For emergency manual publish:

export UV_PUBLISH_TOKEN=pypi-...
uv build
uv publish

Current Status⚓︎

File Statements Missing Excluded Coverage
calcipy/__init__.py 4 0 0 100.0%
calcipy/_compat.py 3 0 0 100.0%
calcipy/_runtime_type_check_setup.py 13 0 37 100.0%
calcipy/can_skip.py 4 0 0 100.0%
calcipy/cli.py 34 0 78 97.4%
calcipy/code_tag_collector/__init__.py 5 0 3 100.0%
calcipy/code_tag_collector/_collector.py 4 0 0 100.0%
calcipy/collection.py 45 0 65 98.0%
calcipy/dot_dict/__init__.py 3 0 2 100.0%
calcipy/dot_dict/_dot_dict.py 6 0 0 100.0%
calcipy/experiments/__init__.py 0 0 0 100.0%
calcipy/experiments/bump_programmatically.py 4 0 25 100.0%
calcipy/experiments/check_duplicate_test_names.py 33 0 2 98.2%
calcipy/experiments/sync_package_dependencies.py 4 0 0 100.0%
calcipy/file_search.py 4 0 0 100.0%
calcipy/invoke_helpers.py 36 0 2 100.0%
calcipy/markup_table.py 4 0 0 100.0%
calcipy/markup_writer/__init__.py 3 0 2 100.0%
calcipy/markup_writer/_writer.py 107 0 9 96.9%
calcipy/noxfile/__init__.py 3 0 2 100.0%
calcipy/noxfile/_noxfile.py 12 0 34 100.0%
calcipy/scripts.py 6 0 51 100.0%
calcipy/tasks/__init__.py 0 0 0 100.0%
calcipy/tasks/all_tasks.py 37 0 0 100.0%
calcipy/tasks/cl.py 21 0 0 100.0%
calcipy/tasks/defaults.py 17 0 0 94.7%
calcipy/tasks/doc.py 29 0 8 100.0%
calcipy/tasks/executable_utils.py 31 0 0 97.1%
calcipy/tasks/lint.py 48 0 0 93.5%
calcipy/tasks/most_tasks.py 29 0 0 100.0%
calcipy/tasks/nox.py 8 0 0 100.0%
calcipy/tasks/pack.py 24 0 0 96.7%
calcipy/tasks/tags.py 29 0 0 100.0%
calcipy/tasks/test.py 41 0 2 98.0%
calcipy/tasks/types.py 16 0 0 100.0%
Totals 667 0 322 98.1%

Generated on: 2026-03-24