ripple-effect
Know your blast radius before you push.
Test a Python library against the downstream projects that depend on it — before you tag a release and find out the hard way.
Installation
pip install ripple-effect
# or, without installing:
uvx ripple-effect show
Usage
Create a ripple-effect.yml config file in your project root (this is the default config file name, so no --config flag needed):
# ripple-effect.yml
upstream: . # the library under test (current folder)
proving-grounds: ./build/ripple # where to clone downstream git repos
downstream-projects:
- https://github.com/example/project-b.git@main
- https://github.com/example/project-c.git@main
Then:
ripple-effect show # preview resolved config
ripple-effect prepare # clone repos, build venvs, inject your library
ripple-effect run # prepare + run all test suites, report results
ripple-effect will:
Clone (or update) each downstream project into proving-grounds
Create a venv for each using uv sync or requirements.txt
Inject your library in editable mode (uv pip install -e .)
Run each project’s test suite
Report pass / fail per project with timing
Real example — this repo’s own ripple-effect.yml:
upstream: https://github.com/codrsquad/runez.git@main
proving-grounds: ./build/verify-runez
downstream-projects:
- https://github.com/zsimic/ripple-effect.git
- https://github.com/codrsquad/portable-python.git
$ ripple-effect run
upstream: runez @ ~/github/ripple-effect/build/verify-runez/runez
ripple-effect: ~/github/ripple-effect/build/verify-runez/ripple-effect
runez already installed editable
portable-python: ~/github/ripple-effect/build/verify-runez/portable-python
runez already installed editable
Testing ripple-effect...
... 2 passed in 0.1s ...
Testing portable-python...
... 24 passed in 2.1s ...
──────────────────────────────────────────────────
ripple-effect: PASSED (0.3s)
portable-python: PASSED (3.1s)
Global flags
ripple-effect --dryrun run # show what would happen without doing it
ripple-effect --verbose run # show debug output including every command run
ripple-effect -c other.yml run # use a different config file
The config file is resolved in this order:
--config / -c flag
RIPPLE_CONFIG environment variable
ripple-effect.yml in the current working directory
Local iteration
Mix local checkouts with remote repos freely:
upstream: ~/github/mylib
proving-grounds: ~/dev/ripple-workspace
downstream-projects:
- https://github.com/example/project-b.git@main
- ~/dev/project-c # local checkout, no git operations
- source-ref: https://github.com/example/project-d.git@main
prepare: "hatch env create" # project uses hatch instead of uv
test: ".venv/bin/pytest tests/ -x"
Metadata
Release files for ripple-effect 1.0.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| ripple_effect-1.0.2.tar.gz | 18.4 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| ripple_effect-1.0.2-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 27.2 kB
Release files / ripple_effect-1.0.2.tar.gz
| Download URL | ripple_effect-1.0.2.tar.gz |
|---|---|
| Size | 18.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
1eaf29a19fcfc9385c0ebf2f4757466c10d8a3726523db8d0c61935d705f5a11
|
|
BLAKE2b-256 checksum How to use checksums |
b3073a392d586ef7325215d7531aaa2b7036ddd399a5903f94a4a9a6704537a5
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 8, 2026.
Transparency logRelease files / ripple_effect-1.0.2-py3-none-any.whl
| Download URL | ripple_effect-1.0.2-py3-none-any.whl |
|---|---|
| Size | 8.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
7a2163e88f50b54d76856949f1e820c7cd8d9143bbbbbac88b55d7ba69fc2212
|
|
BLAKE2b-256 checksum How to use checksums |
51db20e5b87649ccfcb77a33e41b74fb3ec9b770e62da4feae6f20544b3d4146
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 8, 2026.
Transparency log