1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139
|
# justfile for tmuxp
# https://just.systems/
set shell := ["bash", "-uc"]
# File patterns
py_files := "find . -type f -not -path '*/\\.*' | grep -i '.*[.]py$' 2> /dev/null"
test_files := "find . -type f -not -path '*/\\.*' | grep -i '.*[.]\\(yaml\\|py\\)$' 2> /dev/null"
doc_files := "find . -type f -not -path '*/\\.*' | grep -i '.*[.]rst$\\|.*[.]md$\\|.*[.]css$\\|.*[.]py$\\|mkdocs\\.yml\\|CHANGES\\|TODO\\|.*conf\\.py' 2> /dev/null"
# List all available commands
default:
@just --list
# Run tests with pytest
[group: 'test']
test *args:
uv run py.test {{ args }}
# Run tests then start continuous testing with pytest-watcher
[group: 'test']
start:
just test
uv run ptw .
# Watch files and run tests on change (requires entr)
[group: 'test']
watch-test:
#!/usr/bin/env bash
set -euo pipefail
if command -v entr > /dev/null; then
{{ test_files }} | entr -c just test
else
just test
just _entr-warn
fi
# Build documentation
[group: 'docs']
build-docs:
just -f docs/justfile html
# Watch files and rebuild docs on change
[group: 'docs']
watch-docs:
#!/usr/bin/env bash
set -euo pipefail
if command -v entr > /dev/null; then
{{ doc_files }} | entr -c just build-docs
else
just build-docs
just _entr-warn
fi
# Serve documentation
[group: 'docs']
serve-docs:
just -f docs/justfile serve
# Watch and serve docs simultaneously
[group: 'docs']
dev-docs:
#!/usr/bin/env bash
set -euo pipefail
just watch-docs &
just serve-docs
# Start documentation server with auto-reload
[group: 'docs']
start-docs:
just -f docs/justfile start
# Start documentation design mode (watches static files)
[group: 'docs']
design-docs:
just -f docs/justfile design
# Format code with ruff
[group: 'lint']
ruff-format:
uv run ruff format .
# Run ruff linter
[group: 'lint']
ruff:
uv run ruff check .
# Watch files and run ruff on change
[group: 'lint']
watch-ruff:
#!/usr/bin/env bash
set -euo pipefail
if command -v entr > /dev/null; then
{{ py_files }} | entr -c just ruff
else
just ruff
just _entr-warn
fi
# Run mypy type checker
[group: 'lint']
mypy:
uv run mypy $({{ py_files }})
# Watch files and run mypy on change
[group: 'lint']
watch-mypy:
#!/usr/bin/env bash
set -euo pipefail
if command -v entr > /dev/null; then
{{ py_files }} | entr -c just mypy
else
just mypy
just _entr-warn
fi
# Format markdown files with prettier
[group: 'format']
format-markdown:
npx prettier --parser=markdown -w *.md docs/*.md docs/**/*.md CHANGES
# Run monkeytype to collect runtime types
[group: 'typing']
monkeytype-create:
uv run monkeytype run $(uv run which py.test)
# Apply collected monkeytype annotations
[group: 'typing']
monkeytype-apply:
uv run monkeytype list-modules | xargs -n1 -I{} sh -c 'uv run monkeytype apply {}'
[private]
_entr-warn:
@echo "----------------------------------------------------------"
@echo " ! File watching functionality non-operational ! "
@echo " "
@echo "Install entr(1) to automatically run tasks on file change."
@echo "See https://eradman.com/entrproject/ "
@echo "----------------------------------------------------------"
|