Interactive CI pipeline debugger. Step through GitHub Actions workflows locally with Docker.
Project description
PipeStep
A debugger for your CI pipeline.
Step through GitHub Actions workflows locally with Docker. Pause before each step, inspect the environment, drop into a shell, modify variables, re-run failed steps — without pushing and waiting.
The Problem
The CI debugging loop:
- Commit a fix
- Push to GitHub
- Wait 2-5 minutes for the runner
- Watch it fail
- Read the logs, guess what went wrong
- Repeat
A single debugging session eats 30-60 minutes. PipeStep lets you step through the pipeline locally, inspect the container at each stage, and fix issues before you push.
Install
pip install pipestep
Requires Python 3.11+ and Docker Desktop running.
Quick Start
# Point it at any GitHub Actions workflow in your project
pipestep run .github/workflows/ci.yml
Controls
| Key | Action |
|---|---|
| R | Run the current step |
| S | Skip the current step |
| I | Shell into the container (interactive bash) |
| B | Toggle breakpoint on a step |
| N | Auto-run to the next breakpoint |
| Q | Quit and cleanup containers |
When a Step Fails
PipeStep pauses and lets you:
- Shell in to the exact container where it failed — same filesystem, same env vars
- Retry the step after making changes inside the container
- Skip past it and continue the pipeline
- Quit and clean up
No more guessing from log output. You're inside the environment where it broke.
How It Works
- Parses your GitHub Actions YAML
- Maps
runs-onto a local Docker image (e.g.ubuntu-latest→ubuntu:22.04) - Creates a container and executes each step sequentially
- Pauses between steps so you can inspect, modify, or debug
PipeStep vs act
| PipeStep | act | |
|---|---|---|
| Execution model | Step-through with pause/inspect | Batch run |
| Shell into container | Yes, mid-pipeline | No |
| Breakpoints | Yes | No |
| Re-run failed steps | Yes | Restart entire pipeline |
| Primary use case | Debugging | Running locally |
act is great for running pipelines locally. PipeStep is for when things go wrong and you need to figure out why.
Limitations
PipeStep runs your run: steps in a local Docker container. It does not replicate the full GitHub Actions runtime:
- GitHub Actions (
uses:) are detected and skipped — they're shown in the step list but not executed locally - Secrets and
${{ secrets.* }}are not available — replace them with local env vars or hardcode test values in the container - Service containers (
services:) are not started - Matrix builds (
strategy.matrix) are not expanded — pick one combination and test it - Artifact upload/download actions won't run
GITHUB_TOKENand GitHub API access are not provided- Runner OS is mapped to stock Docker images (
ubuntu-latest→ubuntu:22.04) — pre-installed tools on GitHub's runners may be missing - Apple Silicon — Docker runs x86 Linux images through emulation on M-series Macs, which is noticeably slower
These are real constraints. PipeStep's value is debugging your shell commands (run: steps) in the exact container environment — not emulating the full GitHub Actions platform. For full local runs, use act.
Contributing
git clone https://github.com/photobombastic/pipestep.git
cd pipestep
python3.11 -m venv .venv
source .venv/bin/activate
pip install -e ".[dev]"
# Run tests
pytest
License
Project details
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 pipestep-0.1.2.tar.gz.
File metadata
- Download URL: pipestep-0.1.2.tar.gz
- Upload date:
- Size: 13.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3933db39130a7916e1b20d2b6cccb44f8bf1a26c09bb6265c9eddaf103ec861f
|
|
| MD5 |
d6bf03c74f0ac7eb014b234bbbe397ec
|
|
| BLAKE2b-256 |
e6d04fde4e0645ba16a2bbb94ca0fa26df8df39fdb11db3610cc940e4f64d8b8
|
Provenance
The following attestation bundles were made for pipestep-0.1.2.tar.gz:
Publisher:
publish.yml on Photobombastic/pipestep
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
pipestep-0.1.2.tar.gz -
Subject digest:
3933db39130a7916e1b20d2b6cccb44f8bf1a26c09bb6265c9eddaf103ec861f - Sigstore transparency entry: 1085953569
- Sigstore integration time:
-
Permalink:
Photobombastic/pipestep@fc6db2fe46fac71d975ae61a3d31db2650e57dfb -
Branch / Tag:
refs/tags/v0.1.2 - Owner: https://github.com/Photobombastic
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@fc6db2fe46fac71d975ae61a3d31db2650e57dfb -
Trigger Event:
release
-
Statement type:
File details
Details for the file pipestep-0.1.2-py3-none-any.whl.
File metadata
- Download URL: pipestep-0.1.2-py3-none-any.whl
- Upload date:
- Size: 14.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8e8ebb0203f9bba736a947679e8ea424d329420c0b134082195c89f34cd4d9bd
|
|
| MD5 |
352e03cbb87ff403b6e2bf86d707c935
|
|
| BLAKE2b-256 |
8ab66b182315ce6a6d340d6cc1947daa9f43b608566d7ed68324acd1ae16dbf3
|
Provenance
The following attestation bundles were made for pipestep-0.1.2-py3-none-any.whl:
Publisher:
publish.yml on Photobombastic/pipestep
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
pipestep-0.1.2-py3-none-any.whl -
Subject digest:
8e8ebb0203f9bba736a947679e8ea424d329420c0b134082195c89f34cd4d9bd - Sigstore transparency entry: 1085953622
- Sigstore integration time:
-
Permalink:
Photobombastic/pipestep@fc6db2fe46fac71d975ae61a3d31db2650e57dfb -
Branch / Tag:
refs/tags/v0.1.2 - Owner: https://github.com/Photobombastic
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@fc6db2fe46fac71d975ae61a3d31db2650e57dfb -
Trigger Event:
release
-
Statement type: