Development setup
How to run SuperConf locally and across supported Python versions.
Status
| Area | Today | CI toolkit (in progress) |
|---|---|---|
Poetry + in-project .venv/ |
Works (poetry.toml) |
Same |
Task + PY=poetry run |
Works (root Taskfile.yml) |
CORE + docs Taskfile |
| mise pins (python, poetry, task, shellcheck) | Works (mise.toml + .envrc) |
Same |
task clean / test_matrix |
Not yet | scripts/clean_workspace.sh, run_python_matrix.sh |
| Docs Task / MkDocs CI | docs/Taskfile.yml + gh_page.yml (workflow_dispatch, any branch) |
Same |
| GitHub Actions | test_project.yml (single 3.11) |
Matrix + thin setup-ci later |
Usable now: mise install, poetry install --with dev, task test_report, task test_lint / fix_lint, task test_examples, ./scripts/release.sh --dry-run.
Secrets: put PyPI tokens in poetry config, your shell env, or gitignored .envrc.local — never in committed .envrc.
Supported Python versions
| Version | |
|---|---|
| Declared in packaging | python = "^3.9" (pyproject.toml) |
| Daily / release base | 3.11 (mise.toml) |
| CI matrix (planned) | 3.10–3.13 |
| Docs build (planned) | 3.10 or daily pin |
Virtualenvs (always)
Development always uses a project-local virtualenv — never install into the system Python.
| Env | Path | Role |
|---|---|---|
| Daily / release | .venv/ |
Poetry in-project env (poetry.toml: virtualenvs.in-project = true) |
| Version matrix (planned) | .venvs/pyX.Y/ |
Isolated envs for task test_matrix (does not replace .venv) |
Both directories are gitignored.
Prerequisites
- mise — pins Python 3.11 (override with
PYTHON_VERSION), Poetry 2.1.4, Task 3.52.0, and shellcheck (mise.toml) - A shell with mise activated (
eval "$(mise activate bash)", or direnv +use misein.envrc)
After cloning, trust the config once: mise trust.
Poetry and Task come from mise after mise install — you do not need a system-wide Poetry install.
Secrets: never put PyPI tokens in .envrc or commit them. Use poetry config or export POETRY_PYPI_TOKEN_PYPI / POETRY_PYPI_TOKEN_TESTPYPI in your private shell env. See Release.
Bootstrap (daily env)
# 1) Activate mise in this shell (skip if direnv already loaded .envrc)
eval "$(mise activate bash)" # or: eval "$(mise activate zsh)"
# 2) Install pinned tools
mise install
mise which poetry # should print a path under ~/.local/share/mise/...
# 3) Create/update project .venv
poetry env use "$(mise which python)"
poetry install --with dev
If Poetry is only available inside an existing .venv (bootstrap in progress):
After bootstrap, run Task as usual — Python tools are invoked via poetry run
(see PY in the root Taskfile), so you do not need to activate .venv:
poetry itself must be on your PATH (from mise activate / .envrc), or use ./.venv/bin/poetry run task ….
Useful subsets:
| Task | What it runs |
|---|---|
task test_report |
Pytest + coverage on superconf |
task test_pytest |
Pytest suite |
task test_examples |
Example scripts via scripts/run_python_scripts.sh |
task test_lint |
isort --check-only, black --check, pylint |
task test_lint_full |
Lint + yamllint + markdown + shellcheck |
task fix_lint |
isort + black (rewrite) |
task clean |
Planned: remove .venv, .venvs, caches, build artifacts |
Reset environment (fresh-clone-like)
Planned once scripts/clean_workspace.sh lands:
Expected deletions (same idea as Clak):
.venv/,.venvs/dist/,build/,*.egg-info__pycache__/,.pytest_cache/, coverage and similar cachesdocs/site/,.cache/
Then bootstrap again:
eval "$(mise activate bash)" # if needed
mise install
poetry env use "$(mise which python)"
poetry install --with dev
Local Python matrix
Planned: exercise 3.10–3.13 without touching daily .venv, using isolated envs under .venvs/pyX.Y.
Override the set with PYTHON_MATRIX if needed:
CI
GitHub Actions will use an in-project .venv and run the same command as locally:
See .github/workflows/test_project.yml (single Python 3.11; matrix later).
Documentation deploy: .github/workflows/gh_page.yml — run gen-documentation via Actions → Run workflow, and pick any branch.
Releases
Bump/tag/publish uses the daily .venv. Maintainer guide: Release.