Skip to main content

ripple-effect

Know your blast radius before you push.

Version on pypi Tested with Github Actions Python versions tested

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:

  1. Clone (or update) each downstream project into proving-grounds

  2. Create a venv for each using uv sync or requirements.txt

  3. Inject your library in editable mode (uv pip install -e .)

  4. Run each project’s test suite

  5. 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:

  1. --config / -c flag

  2. RIPPLE_CONFIG environment variable

  3. 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)

Source distribution for ripple-effect 1.0.2
File Size Uploaded
ripple_effect-1.0.2.tar.gz 18.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for ripple-effect 1.0.2
File Interpreter ABI Platform
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 log

Release 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

Release history Release notifications | RSS feed

This release

1.0.2 This release

2 release files

1.0.1

2 release files

1.0.0

2 release files

0.0.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page