End-user CLI for deploying apps to urun
Project description
urun CLI
Deploy Python apps to urun from your terminal.
Install
uv tool install urun-cli
# or
pip install urun-cli
The package installs the urun command:
urun --version
For one-off uvx usage:
uvx --from urun-cli urun --version
# or the package-matching command alias
uvx urun-cli --version
Quick start
Today, an operator manually vends an org-scoped deploy API key. Save it locally
with urun login:
urun login --api-key urun_<32hex>
urun login verifies the key with the urun API and stores credentials for later
commands. The future browser-based login flow is not available in this CLI
release.
For CI or one-off commands, you can still use the environment variable:
export URUN_API_KEY=urun_<32hex>
Create app.py:
import urun
from urun import App
app = App("hello-h100")
@app.function(gpus="h100:1")
def hello(ctx: urun.Context):
print(f"running on {ctx.device}")
return {"device": str(ctx.device)}
Run it:
urun run app.py
In this release, urun run uses the same deploy pipeline as urun deploy.
deploy remains available as the lower-level command while the full
deploy/run/monitor workflow is being built.
What gets deployed
urun deploy creates a source manifest from your Python entrypoint:
| Entrypoint | Included source |
|---|---|
urun deploy app.py |
app.py and local Python files it imports |
Dependencies are declared in your urun app code. Project-level files such as
pyproject.toml and requirements.txt are not uploaded as dependency
declarations by the CLI.
Generated/cache content such as .git, dotfiles, __pycache__, and .pyc
files is excluded. Add .urunignore to exclude additional paths.
Non-Python assets such as templates, static files, and data files are not auto-included yet.
Common options
Shared by run and deploy:
| Option | Description |
|---|---|
--name |
Override the derived app name. |
--api-url |
Override the API URL; defaults to URUN_API_URL, saved login credentials, or https://api.urun.sh/v1. |
--api-key |
Deploy API key; defaults to URUN_API_KEY or saved login credentials. |
--no-wait |
Finalize but do not poll for readiness. |
--poll-interval, --timeout |
Control readiness polling. |
Troubleshooting
| Error | Fix |
|---|---|
missing API key |
Run urun login, set URUN_API_KEY, or pass --api-key. |
invalid API key format |
Use urun_<32 lowercase hex chars>. |
entrypoint not found |
Run from the project root or pass the entrypoint path. |
path is outside the project root |
Move the file under the project before deploying. |
| Expected files are missing | Import local Python files from app.py; non-Python assets are not auto-included yet. |
Development
Contributing and test instructions are in CONTRIBUTING.md.
License
MIT.
Development environment
This repo has a Nix/direnv/devcontainer baseline:
direnv allow
just sync
just check
Use VS Code Dev Containers to open the repository with the same toolchain in a container. Copy devcontainer.env.example to .devcontainer.env if you need to pass local git identity or other non-secret development settings into the container.
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 urun_cli-0.2.0.tar.gz.
File metadata
- Download URL: urun_cli-0.2.0.tar.gz
- Upload date:
- Size: 12.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0a980a9428afa4ed0d5890b2931b4f24c4d70127392df077df90deca78705d85
|
|
| MD5 |
efe65d1d66988448f0a7e903be837136
|
|
| BLAKE2b-256 |
6c3de0e5935a63a968de6790a73ac9bbe8ee794f70feb58b75e527ddf610e4a6
|
Provenance
The following attestation bundles were made for urun_cli-0.2.0.tar.gz:
Publisher:
release.yaml on urun-sh/urun-cli
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
urun_cli-0.2.0.tar.gz -
Subject digest:
0a980a9428afa4ed0d5890b2931b4f24c4d70127392df077df90deca78705d85 - Sigstore transparency entry: 1677103389
- Sigstore integration time:
-
Permalink:
urun-sh/urun-cli@202df1b6647a33c5c64d1283111c76fe6f722633 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/urun-sh
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yaml@202df1b6647a33c5c64d1283111c76fe6f722633 -
Trigger Event:
push
-
Statement type:
File details
Details for the file urun_cli-0.2.0-py3-none-any.whl.
File metadata
- Download URL: urun_cli-0.2.0-py3-none-any.whl
- Upload date:
- Size: 13.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f46b6a4bf5fb190b1b4004247687fd420055513bed31eb16b0b36a64dc93e509
|
|
| MD5 |
e9052312bb2f508f0576dc7a3b1b3c6e
|
|
| BLAKE2b-256 |
76ce112495509fe7f48e8a95a9182d4caea67d05513d44489c483e82ea7ea88a
|
Provenance
The following attestation bundles were made for urun_cli-0.2.0-py3-none-any.whl:
Publisher:
release.yaml on urun-sh/urun-cli
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
urun_cli-0.2.0-py3-none-any.whl -
Subject digest:
f46b6a4bf5fb190b1b4004247687fd420055513bed31eb16b0b36a64dc93e509 - Sigstore transparency entry: 1677103396
- Sigstore integration time:
-
Permalink:
urun-sh/urun-cli@202df1b6647a33c5c64d1283111c76fe6f722633 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/urun-sh
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yaml@202df1b6647a33c5c64d1283111c76fe6f722633 -
Trigger Event:
push
-
Statement type: