Testing & GitHub Integrations#

Test Code#

All new features must have accompanying test code that verifies their correctness; no PR will be accepted without it. A jupyter notebook explaining how to use the new feature is also strongly recommended. Bug fixes should have a regression test added to verify the issue is fixed and doesn’t return. Tests must be runnable by pytest. If a test writes a file to disk, it must use pytest’s tmp_path fixture to ensure the file is removed after the test. The dysh development team can provide help developing regression tests for bug fixes.

Tests must be named test_*.py and located within a tests directory of their parent module. All tests are run as a GitHub Workflow in dysh’s continuous integration suite defined in dysh/.github/workflows/ci.yml.

Pre-Commit Hooks#

We use pre-commit with hooks that ensure committed code follows desired standards. The hooks can be found in dysh/.pre-commit-config.yaml.

There are two steps for enabling pre-commit in your repo: 1) installing the pre-commit package and 2) installing the hooks in your clone of the dysh repo.

Installing the pre-commit package#

You can install pre-commit globally, so that it is active for any of your projects that have hooks, or just locally for dysh. For a global install, in your normal environment:

$ uv tool install pre-commit

If you prefer local to dysh, the pre-commit package is automatically installed with the dev dependency group when installing dysh:

(dysh) $ uv sync --dev

Installing dysh’s pre-commit hooks#

To install the pre-commit hooks into your repo (dysh/.git/hooks/pre-commit)

Globally:

pre-commit install

Locally:

(dysh) $ uv run pre-commit install

pre-commit will run whenever you commit to make sure all of the staged files are formatted correctly.

(dysh) $ git add newfile.py
(dysh) $ git commit -m "adding new python file" newfile.py

You’ll see a message like this, then the information about your commit.

 trim trailing whitespace.................................................Passed
 fix end of files.........................................................Passed
 check toml...........................................(no files to check)Skipped
 check for added large files..............................................Passed
 debug statements (python)................................................Passed
 detect private key.......................................................Passed
 mixed line ending........................................................Passed
 check docstring is first.................................................Passed
 check for case conflicts.................................................Passed
 yamlfmt..............................................(no files to check)Skipped
 ruff format.............................................................. Failed

 - hook id: ruff-format
 - files were modified by this hook

 1 file reformatted

  ruff check...............................................................Passed

If a check Failed, then a file was modified by pre-commit, so you must commit again to get those changes.

$  git commit -m "adding new python file" newfile.py

trim trailing whitespace.................................................Passed
fix end of files.........................................................Passed
check toml...........................................(no files to check)Skipped
check for added large files..............................................Passed
debug statements (python)................................................Passed
detect private key.......................................................Passed
mixed line ending........................................................Passed
check docstring is first.................................................Passed
check for case conflicts.................................................Passed
yamlfmt..............................................(no files to check)Skipped
ruff format..............................................................Passed
ruff check...............................................................Passed
[your_branch_name  commit_hash] "adding new python file"
 1 file changed, 2 insertions(+), 2 deletions(-)