pull-pal
v0.1.3
Published
Git push wrapper that auto-fetches, rebases against the default branch, and runs tests before pushing
Downloads
39
Readme
pull-pal
A git push wrapper that automatically:
- Fetches the remote
- Checks if your branch is behind the remote default branch (
main,master, etc.) - Rebases if needed
- Detects and runs your project's test suite
- Blocks the push if tests fail
Works with any language or framework — Node, Python, Go, Rust, Java, Ruby, and more. No configuration required.
Install
npm install -g pull-palInstalls the correct precompiled binary for your platform automatically.
Usage
Replace git push with pull-pal:
pull-palAll standard git push flags are passed through:
pull-pal --force-with-lease
pull-pal origin my-feature-branch
pull-pal origin main --tagsOptions
| Flag | Description |
|---|---|
| --no-rebase | Skip the fetch + rebase step |
| --no-tests | Skip the test runner step |
| --help | Show help |
Auto-run on every git push
Install a pre-push hook in any repo once:
pull-pal setupEvery git push from that point — terminal, IDE, or GUI — automatically triggers the full pull-pal workflow. To remove the hook:
pull-pal remove-hookWhat it does, step by step
→ Fetching remote...
✓ Fetched
→ Checking against origin/main...
✓ Up to date with origin/main
→ Detecting test runner...
→ Running: bun test
... (test output) ...
✓ Tests passed
→ Pushing...
✓ Pushed successfully!If your branch is behind:
→ Behind origin/main — rebasing...
✓ Rebased onto origin/mainIf tests fail:
✗ Tests failed — push blocked.Supported test runners
Detected automatically by project files — no config needed:
| Project files | Command |
|---|---|
| package.json with "test" script | bun test or npm test |
| Cargo.toml | cargo test |
| go.mod | go test ./... |
| pyproject.toml / pytest.ini / setup.py | pytest |
| pom.xml | mvn test |
| build.gradle / gradlew | ./gradlew test |
| Makefile with test target | make test |
| Gemfile + spec/ directory | bundle exec rspec |
| Gemfile (no spec/) | bundle exec rake test |
If no runner is detected, a warning is shown and the push proceeds.
How it works
pull-pal ships as a thin JS wrapper (run.js) that resolves the correct precompiled binary for your OS and CPU from one of four optional dependencies:
@nikeproduct/pull-pal-darwin-arm64— macOS Apple Silicon@nikeproduct/pull-pal-darwin-x64— macOS Intel@nikeproduct/pull-pal-linux-x64— Linux x64@nikeproduct/pull-pal-win32-x64— Windows x64
npm installs only the one that matches your platform.
Other install methods
pip:
pip install pull-palHomebrew (macOS):
brew tap nikeproduct/pull-pal
brew install pull-pal