Know your blast radius before you push
Project description
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"
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file ripple_effect-1.0.1.tar.gz.
File metadata
- Download URL: ripple_effect-1.0.1.tar.gz
- Upload date:
- Size: 17.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c072cde31709a91fd49add62a9451d9785f6777b1e7aea6ebf083968b50c4f31
|
|
| MD5 |
8a419b166b27e2117e03d9810642deef
|
|
| BLAKE2b-256 |
ed8b3dbf400063f13575f64055c33cde405fd84503553793d396c0d2a326d02e
|
Provenance
The following attestation bundles were made for ripple_effect-1.0.1.tar.gz:
Publisher:
release.yml on zsimic/ripple-effect
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
ripple_effect-1.0.1.tar.gz -
Subject digest:
c072cde31709a91fd49add62a9451d9785f6777b1e7aea6ebf083968b50c4f31 - Sigstore transparency entry: 1448569061
- Sigstore integration time:
-
Permalink:
zsimic/ripple-effect@a949b4928a45c40cd08c21281e5140c888b70e78 -
Branch / Tag:
refs/tags/v1.0.1 - Owner: https://github.com/zsimic
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@a949b4928a45c40cd08c21281e5140c888b70e78 -
Trigger Event:
push
-
Statement type:
File details
Details for the file ripple_effect-1.0.1-py3-none-any.whl.
File metadata
- Download URL: ripple_effect-1.0.1-py3-none-any.whl
- Upload date:
- Size: 8.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
875fb3a3a80b235a05ec359a8025f0f7bee3e3bbab007b51a9c38cd64779dd99
|
|
| MD5 |
ceb051d934f9af4ecc7b452bd53c75b5
|
|
| BLAKE2b-256 |
76013c9420c4268927a24f2630462359b86161f6125b7023186529e814bc9af5
|
Provenance
The following attestation bundles were made for ripple_effect-1.0.1-py3-none-any.whl:
Publisher:
release.yml on zsimic/ripple-effect
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
ripple_effect-1.0.1-py3-none-any.whl -
Subject digest:
875fb3a3a80b235a05ec359a8025f0f7bee3e3bbab007b51a9c38cd64779dd99 - Sigstore transparency entry: 1448569149
- Sigstore integration time:
-
Permalink:
zsimic/ripple-effect@a949b4928a45c40cd08c21281e5140c888b70e78 -
Branch / Tag:
refs/tags/v1.0.1 - Owner: https://github.com/zsimic
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@a949b4928a45c40cd08c21281e5140c888b70e78 -
Trigger Event:
push
-
Statement type: