Oneport — the pre-ship gate
One command runs every Oneport check across your repo and tells you, in one verdict, whether it's safe to ship.
onp ship orchestrates the whole Oneport tool suite — secret scanning, dependency
vulnerabilities, migration safety, code review, API breaking changes, test gaps,
and more — into a single ship-readiness verdict with a single exit code for CI.
It doesn't reimplement the tools. It runs each independent Oneport CLI, merges their findings by severity, and answers the only question that matters before a deploy: is this safe to ship, and if not, what do I fix first?
$ onp ship
Ship readiness: BLOCKED — 2 blocker(s), 3 warning(s)
MUST FIX before shipping
✗ [secrets] AWS Access Key ID config.py:12
fix: Deactivate the key in IAM, rotate it, purge git history.
✗ [migrate] Drops a column with no reverse migration 0042_auto.py:8
SHOULD FIX
⚠ [depcheck] requests 2.19 — CVE reachable in fetch.py:42
⚠ [review] SQL injection risk users.py:8
✓ apidiff ✓ testgap
→ Fix the 2 blocker(s), then run onp ship again.
Install
pip install oneport # the orchestrator (this package)
# plus whichever tools you want gated:
pip install oneport-secrets oneport-depcheck oneport-migrate oneport-review \
oneport-apidiff oneport-testgap
oneport doctor shows which tools are installed.
Use
onp init # scaffold .oneport/oneport.yaml + guidelines.md
onp ship # run the gate on the whole repo
onp ship src/ # or a subpath
onp ship --format json # machine-readable, for CI
onp ship --fail-on critical # only critical findings block
oneport dashboard # the same verdict as a local HTML dashboard (nothing uploaded)
oneport list # show which gates will run
onp tools # the whole suite, by layer, with install status
oneport usage # token usage from the local ledger
Exit code is 1 when any gate blocks, 0 when clear — drop onp ship straight
into CI.
The whole suite, one front door
Every Oneport tool is a first-class onp subcommand — onp <tool> ... forwards to
the tool's own CLI, so this one command is the way into the platform:
| Layer | Tools |
|---|---|
| Trust | onp secrets · onp depcheck · onp migrate · onp review · onp apidiff · onp testgap · onp costwatch |
| Velocity | oneport impact · oneport standup · oneport upgrade |
| Knowledge | oneport context · oneport docgen |
| Operations | oneport apiwatch · oneport postmortem · oneport debug · oneport debt |
| Governance | oneport evidence |
oneport standup daily # your git → standup notes
oneport impact analyze billing/stripe.py # what breaks if I touch this?
oneport upgrade scan --to django:5.0 # deprecated-API readiness
oneport evidence report -F soc2 -o pack.pdf # SOC 2 evidence from your ship history
onp review --staged # AI review of what you're committing
Each tool is its own pip package — install only what you use; onp tools shows
what's present and gives the install hint for what isn't. A tool that isn't
installed never breaks the umbrella.
Configure — .oneport/oneport.yaml
gates: # which gates run, in order (omit for sensible defaults)
- secrets
- depcheck
- migrate
- review
- apidiff
- testgap
fail_on: error # verdict blocks on this severity or higher
Or keep the defaults and adjust with enable: / disable: lists. The same
.oneport/ directory holds guidelines.md — the shared brain every Oneport
tool reads.
How it fits together
- oneport_core — the shared spine: the result contract every tool's JSON is normalised into, config loading, the tool registry, and the usage ledger.
- oneport_cli — the
oneportorchestrator: runs each gate as a subprocess, merges results, renders the verdict.
A tool that isn't installed is skipped; a tool that errors is surfaced (and, by default, blocks — a gate that can't run means the repo can't be certified). No tool failure ever takes down the whole run.
Privacy
Serverless by design. oneport runs the tools on your machine; each tool talks only
to its model API on your own key. There is no Oneport server. The usage ledger
(~/.oneport/usage.db) stores token counts and a one-way hash of the repo path
— never your code.
Metadata
Release files for oneport 0.4.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| oneport-0.4.0.tar.gz | 50.1 kB | Without provenance | Details for oneport-0.4.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| oneport-0.4.0-py3-none-any.whl | Python 3 | none | any | Details for oneport-0.4.0-py3-none-any.whl |
Total release size: 96.0 kB
Release files / oneport-0.4.0.tar.gz
| Download URL | oneport-0.4.0.tar.gz |
|---|---|
| Size | 50.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
339b0747fffb0a7df77fd589fab3d057b1e6fefd3a782ce0f6703a08eb84c8b3
|
|
BLAKE2b-256 checksum How to use checksums |
a331d6e598e9b0a4b00c8ddfd36b1169b1e9b355c867737e92bcb4e2eac48d3e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.0
|
Release files / oneport-0.4.0-py3-none-any.whl
| Download URL | oneport-0.4.0-py3-none-any.whl |
|---|---|
| Size | 45.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
2adbba173ee276eda4f7170dbdf519986fd7ecbd51b9acf639635cfe3f742822
|
|
BLAKE2b-256 checksum How to use checksums |
7a7f59745b3da08c5df431253547229a4602edaff60149930c9b979279b98a2d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.0
|
Security for oneport 0.4.0
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.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.